
思路一:模拟+双指针
- 依次遍历并比较每一个字符,顺利比较完成且没有剩余则true;
- 两个指针i1,i2分别指向当前所在数组元素,两个指针j1,j2分别指向当前遍历到数组元素内的位置:
Java
class Solution {
public boolean arrayStringsAreEqual(String[] word1, String[] word2) {
int n1 = word1.length, n2 = word2.length;
int i1 = 0, i2 = 0, j1 = 0, j2 = 0;
while (i1 < n1 && i2 < n2) {
if (word1[i1].charAt(j1++) != word2[i2].charAt(j2++))
return false;
if (j1 == word1[i1].length()) {
i1++;
j1 = 0;
}
if (j2 == word2[i2].length()) {
i2++;
j2 = 0;
}
}
return i1 == n1 && i2 == n2;
}
}
- 时间复杂度:O(∑i1=0n1−1word1[i1].length+∑i2=0n2−1word2[i2].length)
- 空间复杂度:O(1)
C++
int n1 = word1.length, n2 = word2.length;
int i1 = 0, i2 = 0, j1 = 0, j2 = 0;
while (i1 < n1 && i2 < n2) {
if (word1[i1].charAt(j1++) != word2[i2].charAt(j2++))
return false;
if (j1 == word1[i1].length()) {
i1++;
j1 = 0;
}
if (j2 == word2[i2].length()) {
i2++;
j2 = 0;
}
}
return i1 == n1 && i2 == n2;
- 时间复杂度:O(∑i1=0n1−1word1[i1].length+∑i2=0n2−1word2[i2].length)
- 空间复杂度:O(1)
Rust
impl Solution {
pub fn array_strings_are_equal(word1: Vec<String>, word2: Vec<String>) -> bool {
let (n1, n2) = (word1.len(), word2.len());
let (mut i1, mut i2, mut j1, mut j2) = (0, 0, 0, 0);
while i1 < n1 && i2 < n2 {
if word1[i1].as_bytes()[j1] != word2[i2].as_bytes()[j2] {
return false;
}
j1 += 1;
j2 += 1;
if j1 == word1[i1].len() {
i1 += 1;
j1 = 0;
}
if j2 == word2[i2].len() {
i2 += 1;
j2 = 0;
}
}
i1 == n1 && i2 == n2
}
}
- 时间复杂度:O(∑i1=0n1−1word1[i1].length+∑i2=0n2−1word2[i2].length)
- 空间复杂度:O(1)
思路二:API合并字符串【一行解决】
- 将容器内的段拼合起来直接比较,这里直接调用了各种函数的字符串拼接函数,也可以自己写……
Java
class Solution {
public boolean arrayStringsAreEqual(String[] word1, String[] word2) {
return String.join("", word1).equals(String.join("", word2));
}
}
C++
class Solution {
public:
bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
return accumulate(word1.begin(), word1.end(), string("")) == accumulate(word2.begin(), word2.end(), string(""));
}
};
Rust
impl Solution {
pub fn array_strings_are_equal(word1: Vec<String>, word2: Vec<String>) -> bool {
word1.join("") == word2.join("")
}
}
总结