题目
给你两个字符串数组 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
解题
方法一:拼接+比较
过于简单,就不写了, 这种方法会浪费 存储拼接结果的空间
方法二:四个指针
k1,k2
分别指向word1,word2
中的字符串
i,j
分别指向k1,k2
指向字符串中具体的字符
class Solution { public: bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) { int n1=word1.size(),n2=word2.size(); int k1=0,k2=0;//k1,k2分别表示word1,word2中第几个字符串 int i=0,j=0;//word1、word2中每个字符串中的索引 while(k1<n1||k2<n2){ if(k1>=n1||k2>=n2) return false; if(word1[k1][i]!=word2[k2][j]) return false; i++; j++; while(k1<n1&&i==word1[k1].size()){ //while是为了防止空字符串 k1++; i=0; } while(k2<n2&&j==word2[k2].size()){ k2++; j=0; } } return true; } };