Advertisement

r语言判断字符是否相等_动画学数据结构:轻松掌握数组和字符串

阅读量:
8757da3d096161f1be0aef63c5de4090.png

在面试中,我们最常见到的数据结构莫过于这么几类:

  • 数组和字符串
  • 链表
  • 队列
  • 双端队列

本文将深入探讨数据结构的基础知识,并邀请读者一同感受数组与字符串的独特魅力

一、数组和字符串

数组和字符串是极为基础的数据结构,在多数编程语言中都具有非常类似的特性。这部分的算法面试题亦是数量最多。

在解决相关字符串面试题时

一种高效且直接的方法是利用两个指针策略,在字符串的前端标记a而在后端标记m的位置进行操作。随后将这两个位置上的字符进行互换位置,并使两指针逐步朝向中间方向移动以完成后续的操作步骤。当两指针交汇时即表示完成整个操作流程

因为无法直接对字符数据进行修改的原因在于字符串中的字符无法被直接访问或更改;因此需要先将字符串转换成数组形式,并通过该算法来处理。

动画演示

e59cb82a70fb93f127523039f848586d.gif

要掌握一种数据结构,就必须要懂得分析它的优点和缺点。

数组的优点

  • 建立一个数组极为容易
    • 被允许在O(1)的时间内通过数组索引查询某个元素

数组的缺点

  • 在构建过程中应分配一段连续的空间。
    • 当试图确定某一个元素是否存在时,则需遍历整个数组并花费 O(n) 时间(其中 n 表示元素总数)。
    • 查询某一个元素的存在性则需遍历整个数组并耗时 O(n),其中 n 为所有可能的元素除外。

动画演示

4ff06668e5c47d8153a626ed24cc6cae.gif

因此,在评估是否应借助数组来辅助现有算法时,请务必权衡其优劣,并考察其缺陷是否会加剧所用算法的时间复杂度和空间复杂度。

二、例题分析

力扣 242. 有效的字母异位词点击查看题目

力扣​leetcode-cn.com

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1 :

复制代码
 输入: s = "anagram", t = "nagaram"

    
 输出: true

示例 2 :

复制代码
 输入: s = "rat", t = "car"

    
 输出: false

说明 :

你可以假设字符串只包含小写字母。

进阶 :

当输入字符串包含Unicode字符时该怎么办?是否可以调整你的解决方案以应对这种情况?

解决方案

所指的字母异位词即是两个字符串中各对应相同字符的数量相等。举个例子来说吧:s 是 'anagram' ,t 是 'nagaram' ,那么 s 就是 t 的一种字母异位词。因为这些字符串都会包含三个 a、单个 g、单个 m、单个 n 和单个 r。再比如如果 s 是 'rat' 而 t 是 'car' ,那么就不存在这种关系了。

这道题应该怎么分析和处理呢?题目里有一个重要的前提:

假设两个字符串只包含小写字母

众所周知, 小写字母仅限于26个, 这就意味着我们可以利用两个长度均为26的字符数组来分别统计每个字符串中各小写字母出现的频率情况, 然后通过比较这两个字符数组中对应位置上的数值来判断两字符串的小写字母分布情况是否一致即可。

另外一种方法就是通过一个长度设定为26的字符数组来实现统计目的:即对字符串s中的每个出现过的字符计数加一,并对字符串t中的相应字符计数值减一;最终只需检查所有小写字母的计数值是否均为零即可完成任务。

通过一系列操作进行处理后, 我们检测到在数组中没有任何一个字符存在, 并且由此推断出 s 和 t 之间存在字母异构关系

动图演示

9a0b3f94616d31be13d87387b5ff7ac0.gif

在这里,在不避免的情况下我们就不会对代码进行详细的分析和解释。

声明:本文归力扣版权所有,未经允许严禁抄袭和翻版。

全部评论 (0)

还没有任何评论哟~