--- ###### tags: `Leetcode` --- # Leetcode 1662. Check If Two String Arrays are Equivalent [link](https://leetcode.com/problems/check-if-two-string-arrays-are-equivalent/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. --- The easiest way to solve this question is just to concatenate each segment in a word and then return True if they are the same. #### Solution 1 ```python= class Solution: def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool: return ''.join(word1) == ''.join(word2) ``` O(T): O(N+M) O(S): O(N) But the space complexity is expensive. --- We can write a helper function to iterate each char in the segment in a word. If we find that the current char we yielded are not the same in both words then we can return false, otherwise, return true. Yield None here signifies that we have exhausted the given input. #### Solution 2 ```python= class Solution: def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool: def chars(word): for segment in word: for char in segment: yield char yield None return all(c1 == c2 for c1, c2 in zip(chars(word1), chars(word2))) ``` O(T): O(N) O(S): O(1)