Problem Link

Description


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.

Solution


Python3

class Solution:
    def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool:
        M, N = len(word1), len(word2)
        i = j = 0
        p1 = p2 = 0
 
        while i < M and j < N:
            while p1 < len(word1[i]) and p2 < len(word2[j]):
                if word1[i][p1] != word2[j][p2]:
                    return False
                
                p1 += 1
                p2 += 1
            
            if p1 == len(word1[i]):
                i += 1
                p1 = 0
            
            if p2 == len(word2[j]):
                j += 1
                p2 = 0
 
        return i == M and j == N

C++

class Solution {
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
        string s1 = "", s2 = "";
        for (auto w : word1) s1 += w;
        for (auto w: word2) s2 += w;
        
        return s1 == s2;
    }
};