LeetCode基础算法题(两个字符串数组是否相等)

描述:

给定两个字符串数组 word1 和 word2,
按相同的顺序,分别连接 word1 和 word2 的字符串,如果得出的两个字符串相等,那么返回 true 否则返回 false。

条件:

  • 1 <= word1.length, word2.length <= 103;
  • 1 <= word1[i].length, word2[i].length <= 103;
  • 1 <= sum(word1[i].length), sum(word2[i].length) <= 103;
  • word1[i] 和 word2[i] 都仅包含小写字母;

实例:

LeetCode基础算法题(两个字符串数组是否相等)

思路:

最简单的思路是分别将 word1 和 word2 的字符串合并,然后比较两个字符串。
这种实现简单,但是可能会对每个字符遍历两次----合并一次,比较一次。

第二种思路是,如下图,直接比较:

LeetCode基础算法题(两个字符串数组是否相等)

但是在处理的过程中要解决两个问题:

  1. 因为上下两个数组中的字符串的长度可能是不一致的,所以要判断字符串是否已经结束,如果结束就要继续比较下一个。
  2. 判断数组是否处理完毕。

下面代码实现中,C 语言我们用 第二种思路,其他的语言实现,我们用第一种方法。

C 实现:

LeetCode基础算法题(两个字符串数组是否相等)

第 17 行: 定义变量 i 和 j,分别存放数组 word1 和 word2 的下标,即标注当前处理的是哪个字符串。
第 18~19 行: 定义变量 max_indx_w1 和 max_indx_w2,分别存放数组 word1 和 word2 最大下标值,主要为了避免后面循环中的重复计算。
第 20~21 行: 定义状态变量 w1_is_end 和 w2_is_end, 分别标注 word1 和 word2 是否处理完毕。
第 23 行: 同时处理 word1 和 word2, 当 word1 和 word2 有任何一个处理完毕就跳出循环;
第 24~27 行: 如果比较的过程中发现相同位置的字符不等,那么不用比较下去了,直接返回 false;
第 28~29 行: 继续下一个字符;
第 30~31 行:判断该字符是否是字符串结尾,如果是,则表明当前字符串已经处理完毕,开始处理同组中的下一个字符串,如果不存在下一个字符串,那么说明当前数组已经处理完毕,则更新 w1_is_end 或 w2_is_end 的值。
第 32 行: 如果 word1 和 word2 仅有一个处理完了,那么说明他们一定是不匹配的,所以返回 false。

LeetCode基础算法题(两个字符串数组是否相等)

Java 实现:

java的实现,我们分别用 word1 和 word2 创建两个 StringBuilder 对象,
然后直接用 StringBuilder 的 compareTo() 方法比较他们。
注意不要用 equals() 方法,它是检查两个对象是否是一个。
当然也可以直接用 String.join() 方法来连接字符串后再比较,但是这种实现实测中效率上要稍微差一点。

LeetCode基础算法题(两个字符串数组是否相等)

 

LeetCode基础算法题(两个字符串数组是否相等)

Python 实现:

LeetCode基础算法题(两个字符串数组是否相等)

 

LeetCode基础算法题(两个字符串数组是否相等)

Go 实现:

LeetCode基础算法题(两个字符串数组是否相等)

 

LeetCode基础算法题(两个字符串数组是否相等)

Rust 实现:

LeetCode基础算法题(两个字符串数组是否相等)

word1: Vec<String> 参数调用必须要启用 #![feature(type_ascription)] 属性。
该属性只有在 nightly 版本中才有效。

LeetCode基础算法题(两个字符串数组是否相等)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论