题目链接:https://leetcode.cn/problems/check-if-two-string-arrays-are-equivalent/
题目描述:
给你一个字符串数组 word1
和 word2
。如果两个数组表示的字符串相同,返回 true
;否则,返回 false
。
数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。
示例 1:
输入:word1 = ["ab", "c"], word2 = ["a", "bc"]
输出:true
解释:
word1 表示的字符串为 "ab" + "c" -> "abc"
word2 表示的字符串为 "a" + "bc" -> "abc"
两个字符串相同,返回 true
示例 2:
输入:word1 = ["a", "cb"], word2 = ["ab", "c"]
输出:false
示例 3:
输入:word1 = ["abc", "d", "defg"], word2 = ["abcddefg"]
输出:true
提示:
1 <= word1.length, word2.length <= 10^3
1 <= word1[i].length, word2[i].length <= 10^3
1 <= sum(word1[i].length), sum(word2[i].length) <= 10^3
-
word1[i]
和word2[i]
由小写字母组成
解法一:双指针
利用两个指针,分别指向两个字符串数组的下标,再利用两个下标,分别执行遍历到的元素的下标,移动四个指针,判断字符串数组的所有字符是否相同。
代码:
class Solution {
public boolean arrayStringsAreEqual(String[] word1, String[] word2) {
int a = 0, b = 0;
int i = 0, j = 0;
int len1 = word1.length;
int len2 = word2.length;
boolean flag = false;
while (a < len1 && b < len2) {
String w1 = word1[a];
String w2 = word2[b];
flag = false;
if (i >= w1.length()) {
i = 0;
a++;
flag = true;
}
if (j >= w2.length()) {
j = 0;
b++;
flag = true;
}
if(flag) {
continue;
}
if (w1.charAt(i) == w2.charAt(j)) {
i++;
j++;
} else {
return false;
}
}
if (a == len1 && b == len2 && i == 0 && j == 0) {
return true;
}
return false;
}
}
解法二:连接字符串
分别连接两个字符串数组生成两个 字符串,比较最终的字符串是否相同。
代码:
class Solution {
public boolean arrayStringsAreEqual(String[] word1, String[] word2) {
return join(word1).equals(join(word2));
}
public String join(String[] words) {
StringBuilder ret = new StringBuilder();
for (String s : words) {
ret.append(s);
}
return ret.toString();
}
}
网友评论