題目鏈接: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();
}
}