
Given two string arrays word1 and word2, return true if the two arrays represent the same string, and false otherwise.
A string is represented by an array if the array elements concatenated in order forms the string.
1
2
3
4
5
6
7
8
| Example 1:
Input: word1 = ["ab", "c"], word2 = ["a", "bc"]
Output: true
Explanation:
word1 represents string "ab" + "c" -> "abc"
word2 represents string "a" + "bc" -> "abc"
The strings are the same, so return true.
|
1
2
3
4
| Example 2:
Input: word1 = ["a", "cb"], word2 = ["ab", "c"]
Output: false
|
1
2
3
4
| Example 3:
Input: word1 = ["abc", "d", "defg"], word2 = ["abcddefg"]
Output: true
|
Constraints:
- 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) <= 103
- word1[i] and word2[i] consist of lowercase letters.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| class Solution {
public boolean arrayStringsAreEqual(String[] word1, String[] word2) {
int len1 = word1.length;
int len2 = word2.length;
int part1Index = 0;
int part2Index = 0;
int i = 0;
int j = 0;
int all1 = countLetters(word1);
int all2 = countLetters(word2);
if (all1 != all2) return false;
int seen1 = 0;
int seen2 = 0;
while (part1Index < len1 && part2Index < len2) {
String w1 = word1[part1Index];
String w2 = word2[part2Index];
if (i == w1.length()) {
i = 0;
part1Index++;
continue;
}
if (j == w2.length()) {
j = 0;
part2Index++;
continue;
}
seen1++;
seen2++;
if (w1.charAt(i) != w2.charAt(j)) {
return false;
} else {
i++;
j++;
}
}
if (seen1 != all1 || seen2 != all1) return false;
return true;
}
int countLetters(String[] words) {
int count = 0;
for (int i = 0; i< words.length; i++) {
count += words[i].length();
}
return count;
}
}
|