leetcode 每日一题 1662. 检查两个字符串数组是否相等 ----- 累加转化字符串比较法、指针二维数组比较法
1662. 检查两个字符串数组是否相等
难度简单
给你两个字符串数组 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
提示:
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]
由小写字母组成
解1:
class Solution { public: string join(vector<string>& words) { string ret = ""; for (auto &s : words) { ret += s; } return ret; } bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) { return join(word1) == join(word2); } };
复杂度分析
时间复杂度:O(n + m)O(n+m),其中 nn 和 mm 分别是 \sum \textit{word1}[i].\textit{length}∑word1[i].length 和 \sum {word2}[i].\textit{length}∑word2[i].length。
空间复杂度:O(n + m)O(n+m),其中 nn 和 mm 分别是 \sum \textit{word1}[i].\textit{length}∑word1[i].length 和 \sum {word2}[i].\textit{length}∑word2[i].length。
解2:
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(n + m)O(n+m),其中 nn 和 mm 分别是 \sum \textit{word1}[i].\textit{length}∑word1[i].length 和 \sum {word2}[i].\textit{length}∑word2[i].length。
空间复杂度:O(1)O(1)。算法只使用了常数个变量来表示指针。
hello my world
本文来自博客园,作者:slowlydance2me,转载请注明原文链接:https://www.cnblogs.com/slowlydance2me/p/16847753.html