@@ -51,7 +51,23 @@ word2 表示的字符串为 "a" + "bc" -> "abc"
51
51
52
52
<!-- 这里可写通用的实现逻辑 -->
53
53
54
- 字符串拼接,比较。
54
+ ** 方法一:字符串拼接**
55
+
56
+ 将两个数组中的字符串拼接成两个字符串,然后比较两个字符串是否相等。
57
+
58
+ 时间复杂度 $O(m)$,空间复杂度 $O(m)$。其中 $m$ 为数组中字符串的总长度。
59
+
60
+ ** 方法二:直接遍历**
61
+
62
+ 方法一中,我们是将两个数组中的字符串拼接成两个新的字符串,有额外的空间开销。我们也可以直接遍历两个数组,逐个字符比较。
63
+
64
+ 我们使用两个指针 $i$ 和 $j$ 分别指向两个字符串数组,用另外两个指针 $x$ 和 $y$ 分别指向字符串对应的字符。初始时,$i = j = x = y = 0$。
65
+
66
+ 每次比较 $word1[ i] [ x ] $ 和 $word2[ j] [ y ] $,如果不相等,直接返回 ` false ` 。否则,将 $x$ 和 $y$ 分别加一,如果 $x$ 或 $y$ 超出了对应的字符串的长度,将对应的字符串指针 $i$ 或 $j$ 加一,然后将 $x$ 和 $y$ 重置为 0。
67
+
68
+ 如果两个字符串数组遍历完毕,返回 ` true ` ,否则返回 ` false ` 。
69
+
70
+ 时间复杂度 $O(m)$,空间复杂度 $O(1)$。其中 $m$ 为数组中字符串的总长度。
55
71
56
72
<!-- tabs:start -->
57
73
@@ -62,8 +78,22 @@ word2 表示的字符串为 "a" + "bc" -> "abc"
62
78
``` python
63
79
class Solution :
64
80
def arrayStringsAreEqual (self , word1 : List[str ], word2 : List[str ]) -> bool :
65
- s1, s2 = ' ' .join(word1), ' ' .join(word2)
66
- return s1 == s2
81
+ return ' ' .join(word1) == ' ' .join(word2)
82
+ ```
83
+
84
+ ``` python
85
+ class Solution :
86
+ def arrayStringsAreEqual (self , word1 : List[str ], word2 : List[str ]) -> bool :
87
+ i = j = x = y = 0
88
+ while i < len (word1) and j < len (word2):
89
+ if word1[i][x] != word2[j][y]:
90
+ return False
91
+ x, y = x + 1 , y + 1
92
+ if x == len (word1[i]):
93
+ x, i = 0 , i + 1
94
+ if y == len (word2[j]):
95
+ y, j = 0 , j + 1
96
+ return i == len (word1) and j == len (word2)
67
97
```
68
98
69
99
### ** Java**
@@ -73,26 +103,112 @@ class Solution:
73
103
``` java
74
104
class Solution {
75
105
public boolean arrayStringsAreEqual (String [] word1 , String [] word2 ) {
76
- StringBuilder s1 = new StringBuilder ();
77
- StringBuilder s2 = new StringBuilder ();
78
- for (String word : word1) {
79
- s1. append(word);
106
+ return String . join(" " , word1). equals(String . join(" " , word2));
107
+ }
108
+ }
109
+ ```
110
+
111
+ ``` java
112
+ class Solution {
113
+ public boolean arrayStringsAreEqual (String [] word1 , String [] word2 ) {
114
+ int i = 0 , j = 0 ;
115
+ int x = 0 , y = 0 ;
116
+ while (i < word1. length && j < word2. length) {
117
+ if (word1[i]. charAt(x++ ) != word2[j]. charAt(y++ )) {
118
+ return false ;
119
+ }
120
+ if (x == word1[i]. length()) {
121
+ x = 0 ;
122
+ ++ i;
123
+ }
124
+ if (y == word2[j]. length()) {
125
+ y = 0 ;
126
+ ++ j;
127
+ }
80
128
}
81
- for (String word : word2) {
82
- s2. append(word);
129
+ return i == word1. length && j == word2. length;
130
+ }
131
+ }
132
+ ```
133
+
134
+ ### ** C++**
135
+
136
+ ``` cpp
137
+ class Solution {
138
+ public:
139
+ bool arrayStringsAreEqual(vector<string >& word1, vector<string >& word2) {
140
+ return reduce(word1.cbegin(), word1.cend()) == reduce(word2.cbegin(), word2.cend());
141
+ }
142
+ };
143
+ ```
144
+
145
+ ```cpp
146
+ class Solution {
147
+ public:
148
+ bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
149
+ int i = 0, j = 0, x = 0, y = 0;
150
+ while (i < word1.size() && j < word2.size()) {
151
+ if (word1[i][x++] != word2[j][y++]) return false;
152
+ if (x == word1[i].size()) x = 0, i++;
153
+ if (y == word2[j].size()) y = 0, j++;
83
154
}
84
- return Objects . equals(s1 . toString(), s2 . toString() );
155
+ return i == word1.size() && j == word2.size( );
85
156
}
157
+ };
158
+ ```
159
+
160
+ ### ** Go**
161
+
162
+ ``` go
163
+ func arrayStringsAreEqual (word1 []string , word2 []string ) bool {
164
+ return strings.Join (word1, " " ) == strings.Join (word2, " " )
165
+ }
166
+ ```
167
+
168
+ ``` go
169
+ func arrayStringsAreEqual (word1 []string , word2 []string ) bool {
170
+ var i , j , x , y int
171
+ for i < len (word1) && j < len (word2) {
172
+ if word1[i][x] != word2[j][y] {
173
+ return false
174
+ }
175
+ x, y = x+1 , y+1
176
+ if x == len (word1[i]) {
177
+ x, i = 0 , i+1
178
+ }
179
+ if y == len (word2[j]) {
180
+ y, j = 0 , j+1
181
+ }
182
+ }
183
+ return i == len (word1) && j == len (word2)
86
184
}
87
185
```
88
186
89
187
### ** TypeScript**
90
188
91
189
``` ts
92
190
function arrayStringsAreEqual(word1 : string [], word2 : string []): boolean {
93
- let s1 = word1 .join (' ' ),
94
- s2 = word2 .join (' ' );
95
- return s1 == s2 ;
191
+ return word1 .join (' ' ) == word2 .join (' ' );
192
+ }
193
+ ```
194
+
195
+ ``` ts
196
+ function arrayStringsAreEqual(word1 : string [], word2 : string []): boolean {
197
+ let [i, j, x, y] = [0 , 0 , 0 , 0 ];
198
+ while (i < word1 .length && j < word2 .length ) {
199
+ if (word1 [i ][x ++ ] != word2 [j ][y ++ ]) {
200
+ return false ;
201
+ }
202
+ if (x == word1 [i ].length ) {
203
+ x = 0 ;
204
+ ++ i ;
205
+ }
206
+ if (y == word2 [j ].length ) {
207
+ y = 0 ;
208
+ ++ j ;
209
+ }
210
+ }
211
+ return i == word1 .length && j == word2 .length ;
96
212
}
97
213
```
98
214
0 commit comments