LeetCode 1662. 检查两个字符串数组是否相等

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1662. 检查两个字符串数组是否相等相关的知识,希望对你有一定的参考价值。

【LetMeFly】1662.检查两个字符串数组是否相等

力扣题目链接:https://leetcode.cn/problems/check-if-two-string-arrays-are-equivalent/

给你两个字符串数组 word1word2 。如果两个数组表示的字符串相同,返回 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

 

提示:

  • 1 <= word1.length, word2.length <= 103
  • 1 <= word1[i].length, word2[i].length <= 103
  • 1 <= sum(word1[i].length), sum(word2[i].length) <= 103
  • word1[i]word2[i] 由小写字母组成

方法一:字符串拼接

按题意就是问两个字符串数组分别拼接起来之后是否相等

那么直接把两个数组中的字符串分别拼接起来就好了

拼接起来之后比较一下是否相等就好

  • 时间复杂度 O ( N ) O(N) O(N),其中 N N N是字符总个数
  • 空间复杂度 O ( N ) O(N) O(N)

AC代码

C++

class Solution 
private:
    string concat(vector<string>& v) 
        string ans;
        for (auto& s : v) 
            ans += s;
        
        return ans;
    
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) 
        return concat(word1) == concat(word2);
    
;

方法二:双指针(或者说“四指针”)

用一个指针指向数组1的第一维(同理用一个指针指向数组2的第一维)

用一个指针指向处理到了 数组1中第一维指针所指字符串的哪个元素(数组2同理)

我们需要数组1的“元素指针”和数组2的“元素指针”所指的元素时刻相同

一旦出现不同,就立刻返回false

当某个“元素指针”超出了所指字符串尾部时,“元素指针”归零,第一维指针后移。

说白了就是通过第一维指针的辅助,“元素指针”按顺序遍历了字符串数组的每一个元素。

这样,与方法一相比,优势在于不需要由于“拼接字符串”而开辟额外的空间了。

  • 时间复杂度 O ( N ) O(N) O(N),其中 N N N是字符总个数
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++

class Solution 
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) 
        int locWords1 = 0, locWord1 = 0;
        int locWords2 = 0, locWord2 = 0;
        bool end1 = false, end2 = false;
        while (true) 
            if (word1[locWords1][locWord1] != word2[locWords2][locWord2]) 
                return false;
            
            locWord1++, locWord2++;
            if (locWord1 == word1[locWords1].size())   // “元素指针”超出末尾
                locWord1 = 0, locWords1++;
                if (locWords1 == word1.size())  // 第一维指针也指完了
                    end1 = true;
            
            if (locWord2 == word2[locWords2].size()) 
                locWord2 = 0, locWords2++;
                if (locWords2 == word2.size())
                    end2 = true;
            
            if (end1 != end2)  // 两个字符串数组必须同时指完
                return false;
            if (end1)  // 同时指完了则返回true
                return true;
        
    
;

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127641844

以上是关于LeetCode 1662. 检查两个字符串数组是否相等的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode1662. 检查两个字符串数组是否相等(C++)

LeetCode 1662 检查两个字符串数组是否相等[数组] HERODING的LeetCode之路

C#刷Leetcode 1662. 检查两个字符串数组是否相等 IEnumerator

C#刷Leetcode 1662. 检查两个字符串数组是否相等 IEnumerator

C#刷Leetcode 1662. 检查两个字符串数组是否相等 IEnumerator

LeetCode 1662. 检查两个字符串数组是否相等 / 795. 区间子数组个数 / 剑指 Offer 47. 礼物的最大价值