力扣(LeetCode)1662. 检查两个字符串数组是否相等(C++)

一、环境说明

  1. 本文是 LeetCode1662. 检查两个字符串数组是否相等。
  2. 字符串拼接or一次遍历。
  3. 测试环境:Visual Studio 2019。

二、思路分析

字符串拼接

创建 s t r i n g   s 1 , s 2 string\ s1,s2 string s1,s2,将 w o r d 1 word1 word1所有字符串拼接到 s 1 s1 s1后,将 w o r d 2 word2 word2所有字符串拼接到 s 2 s2 s2后。

一次遍历

创建双指针

  • i i i指向 w o r d 1 word1 word1, j j j指向 w o r d 2 word2 word2
  • l l l指向 w o r d 1 [ i ] word1[i] word1[i], r r r指向 w o r d 2 [ j ] word2[j] word2[j]

同时遍历 w o r d 1 、 w o r d 2 word1、word2 word1word2。步骤如下:

  1. 当前的字母不同, r e t u r n   f a l s e return\ false return false;相同, l 、 r l、r lr后移。
  2. l = w o r d 1 [ i ] . s i z e ( ) l = word1[i].size() l=word1[i].size()说明 w o r d 1 word1 word1遍历完毕,此时 i + + , l = 0 i++,l=0 i++l=0,让l指向下一字符串的首字母即可。
  3. r r r同上。
  4. 循环结束后,检查 w o r d 1 、 w o r d 2 word1、word2 word1word2是否被全部遍历。当且仅当 w o r d 1 、 w o r d 2 word1、word2 word1word2按规则被全部遍历, r e t u r n   t r u e return\ true return true

三、代码展示

字符串拼接:

class Solution {
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
        string s1="",s2="";//初始化s1、s2空串
        for(auto x:word1) s1+=x;
        for(auto x:word2) s2+=x;
        return s1==s2;
    }
};

一次遍历:

class Solution {
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
        int i=0,j=0;//i指向word1,j指向word2
        int l=0,r=0;//l指向word1[i],r指向word2[j]
        while(i<word1.size()&&j<word2.size()){
            if(word1[i][l]!=word2[j][r]) return false;//字符串不同
            l++;//比较过了,字符串后移
            r++;
            if(l==word1[i].size()) {
                i++;
                l=0;
            }
            if(r==word2[j].size()) {
                j++;
                r=0;
            }
        }
        return i==word1.size()&&j==word2.size();
    }
};

四、博主致语

理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。

五、AC

AC
ac2

六、复杂度分析

字符串拼接
  1. 时间复杂度: O ( n + m ) O(n+m) O(n+m) , n n n w o r d 1 word1 word1的字符总数,m是 w o r d 2 word2 word2的字符总数。一次遍历 n 、 m n、m nm的时间复杂度是 O ( n + m ) O(n+m) O(n+m)
  2. 空间复杂度: O ( n + m ) O(n+m) O(n+m),字符串 s 1 、 s 2 s1、s2 s1s2的空间复杂度之和是 O ( n + m ) O(n+m) O(n+m)
一次遍历
  1. 时间复杂度: O ( n + m ) O(n+m) O(n+m) , n n n w o r d 1 word1 word1的字符总数,m是 w o r d 2 word2 word2的字符总数。一次遍历 n 、 m n、m nm的时间复杂度是 O ( n + m ) O(n+m) O(n+m)
  2. 空间复杂度: O ( 1 ) O(1) O(1),只使用到了常量级空间,没有使用额外的线性空间。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清墨韵染

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值