กำหนด Array สตริงสองชุด word1 และ word2 ตรวจสอบว่าการนำ Element ในแต่ละ Array มาต่อกัน (Concatenate) ให้ String เดียวกันหรือไม่
ตัวอย่าง
- Input:
word1 = ["ko", "lka", "ta"],word2 = ["k", "olk", "at", "a"] - Output:
True(ทั้งคู่ต่อกันได้ "kolkata")
วิธีแก้
- รวม Element ในแต่ละ Array เป็น String เดียว:
''.join(word1),''.join(word2) - เปรียบเทียบ String ทั้งสอง
โค้ด Python
def are_arrays_equivalent(word1, word2):
"""
ตรวจสอบว่า Array สตริงสองชุดต่อกันได้ String เดียวกันหรือไม่
Args:
word1: List[str] - Array สตริงชุดแรก
word2: List[str] - Array สตริงชุดที่สอง
Returns:
bool - True หากเทียบเท่า, False หากไม่
"""
return ''.join(word1) == ''.join(word2)
# ทดสอบ
if __name__ == "__main__":
# Test Case 1
word1 = ["ko", "lka", "ta"]
word2 = ["k", "olk", "at", "a"]
print(f"Test 1: {word1} vs {word2} => {are_arrays_equivalent(word1, word2)}")
# Expected: True ("kolkata")
# Test Case 2
word1 = ["ab", "c"]
word2 = ["a", "bc"]
print(f"Test 2: {word1} vs {word2} => {are_arrays_equivalent(word1, word2)}")
# Expected: True ("abc")
# Test Case 3
word1 = ["a", "cb"]
word2 = ["ab", "c"]
print(f"Test 3: {word1} vs {word2} => {are_arrays_equivalent(word1, word2)}")
# Expected: False ("acb" vs "abc")
# Test Case 4: Empty arrays
word1 = []
word2 = []
print(f"Test 4: {word1} vs {word2} => {are_arrays_equivalent(word1, word2)}")
# Expected: True (both empty string)
# Test Case 5: One empty
word1 = ["a"]
word2 = []
print(f"Test 5: {word1} vs {word2} => {are_arrays_equivalent(word1, word2)}")
# Expected: False
ผลลัพธ์
Test 1: ['ko', 'lka', 'ta'] vs ['k', 'olk', 'at', 'a'] => True Test 2: ['ab', 'c'] vs ['a', 'bc'] => True Test 3: ['a', 'cb'] vs ['ab', 'c'] => False Test 4: [] vs [] => True Test 5: ['a'] vs [] => False
Complexity Analysis
- Time: O(N) โดย N = ความยาว String รวมทั้งสอง Array
- Space: O(N) สำหรับ String ที่รวมแล้ว (ใน Python
joinสร้าง String ใหม่)
วิธีประหยัด Memory (Generator) - สำหรับข้อมูลใหญ่มาก
def are_arrays_equivalent_memory_efficient(word1, word2):
"""เปรียบเทียบแบบไม่สร้าง String ใหม่ ใช้ Generator"""
def char_generator(words):
for word in words:
for char in word:
yield char
gen1 = char_generator(word1)
gen2 = char_generator(word2)
while True:
try:
c1 = next(gen1)
except StopIteration:
c1 = None
try:
c2 = next(gen2)
except StopIteration:
c2 = None
if c1 != c2:
return False
if c1 is None and c2 is None:
return True
# ทดสอบ
print(are_arrays_equivalent_memory_efficient(["ko", "lka", "ta"], ["k", "olk", "at", "a"])) # True
คำแนะนำ
- ใช้
''.join(list)วิธีที่ Pythonic และเร็วที่สุดสำหรับข้อมูลขนาดปกติ - วิธี Generator ใช้ Memory O(1) เหมาะสำหรับ String ยาวมาก (GBs)
- LeetCode Problem 1662: "Check If Two String Arrays are Equivalent"