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

标签: 数组 字符串

难度: Easy

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

Submission

运行时间: 24 ms

内存: 0.0 MB

class Solution:
    def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool:
        s1 = ''
        s2 = ''
        for i in range(len(word1)):
            s1 += word1[i]
        for i in range(len(word2)):
            s2 += word2[i]
        return s1 == s2

Explain

这道题的思路是首先分别将两个字符串数组word1和word2中的所有字符串元素拼接成两个完整的字符串s1和s2。接着,比较这两个字符串是否相等。如果相等,则返回true,否则返回false。

时间复杂度: O(max(m, n))

空间复杂度: O(m + n)

class Solution:
    def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool:
        s1 = ''  # 初始化s1为空字符串
        s2 = ''  # 初始化s2为空字符串
        for i in range(len(word1)):
            s1 += word1[i]  # 将word1中的每个字符串元素拼接到s1上
        for i in range(len(word2)):
            s2 += word2[i]  # 将word2中的每个字符串元素拼接到s2上
        return s1 == s2  # 比较s1和s2是否相等

Explore

将字符串数组拼接成单个字符串后再进行比较,这种方法的主要优势在于简单性和直观性。它允许直接使用字符串的比较运算符来判断两个数组构成的字符串是否完全相等。如果选择逐个字符比较,虽然在某些情况下可能更高效(如在发现第一个不匹配的字符时立即停止),但这需要额外的逻辑来同步遍历两个数组的不同长度和结构,增加了实现的复杂度。因此,为了保持代码的清晰和易于理解,选择拼接后比较的策略是合理的。

代码中考虑了包括空字符串在内的所有字符串。在Python中,空字符串拼接操作不会改变现有字符串的内容。因此,如果数组中包含空字符串,它们在拼接过程中不会对结果字符串产生任何影响(即不会添加额外的字符)。这保证了即使数组中含有空字符串,拼接得到的最终字符串仍然精确反映了数组中的非空内容。

在Python中,字符串是不可变的,因此每次使用 '+=' 运算符拼接字符串时,实际上会创建一个新的字符串对象,并将原有字符串和要拼接的字符串复制到这个新对象中,这导致了额外的时间和空间开销。对于大量的拼接操作,这种方法效率较低。更高效的方法是使用 'join' 方法,将字符串数组作为参数传递给 'join',这样可以在内部更优化地处理内存分配和复制操作。例如,可以使用 's1 = ''.join(word1)' 和 's2 = ''.join(word2)' 来替代循环中的拼接操作,这通常会提供更好的性能。