加载中...
1662-检查两个字符串数组是否相等(Check If Two String Arrays are Equivalent)
发表于:2021-12-03 | 分类: 简单
字数统计: 337 | 阅读时长: 1分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/check-if-two-string-arrays-are-equivalent

英文原文

Given two string arrays word1 and word2, return true if the two arrays represent the same string, and false otherwise.

A string is represented by an array if the array elements concatenated in order forms the string.

 

Example 1:

Input: word1 = ["ab", "c"], word2 = ["a", "bc"]
Output: true
Explanation:
word1 represents string "ab" + "c" -> "abc"
word2 represents string "a" + "bc" -> "abc"
The strings are the same, so return true.

Example 2:

Input: word1 = ["a", "cb"], word2 = ["ab", "c"]
Output: false

Example 3:

Input: word1  = ["abc", "d", "defg"], word2 = ["abcddefg"]
Output: true

 

Constraints:

  • 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] and word2[i] consist of lowercase letters.

中文题目

给你两个字符串数组 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] 由小写字母组成

通过代码

高赞题解

这个问题拼接字符串直接就可以过,不多说了。

拼接字符串的问题是使用了额外的空间,因为需要存储整个字符串。

这个问题可以直接在给定的数组上进行判断。


具体实现上,需要有 p1p2 两个索引,指向数组 word1word2。同时,还要有 ij 两个索引,指向 word1[p1] 相应的字符和 word2[p2] 相应的字符。每一次比较的是 word1[p1][i]word2[p2][j]

关键是,在比较完一个字符以后,如何看下一个字符?其实也很简单。i ++,但如果 i 走到了 word1[p1].size() 的话,p1 ++i 归零。j 同理。

整个循环的条件是 while(p1 < word1.size() && p2 < word2.size()),在循环结束后,还要判断一下,是不是 p1p2 都走到了 word1word2 的最后。


整个代码并不复杂。我的参考代码(C++):

class Solution {
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {

        int p1 = 0, p2 = 0, i = 0, j = 0;
        while(p1 < word1.size() && p2 < word2.size()){

            if(word1[p1][i] != word2[p2][j]) return false;

            i ++;
            if(i == word1[p1].size()) p1 ++, i = 0;

            j ++;
            if(j == word2[p2].size()) p2 ++, j = 0;
        }
        return p1 == word1.size() && p2 == word2.size();
    }
};

这样做,空间是 O(1) 的。


觉得有帮助请点赞哇!

统计信息

通过次数 提交次数 AC比率
21728 26734 81.3%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
1659-最大化网格幸福感(Maximize Grid Happiness)
下一篇:
1663-具有给定数值的最小字符串(Smallest String With A Given Numeric Value)
本文目录
本文目录