Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรม Python ตรวจสอบ Array สตริงสองชุดเทียบเท่าหรือไม่

กำหนด Array สตริงสองชุด word1 และ word2 ตรวจสอบว่าการนำ Element ในแต่ละ Array มาต่อกัน (Concatenate) ให้ String เดียวกันหรือไม่

ตัวอย่าง

  • Input: word1 = ["ko", "lka", "ta"], word2 = ["k", "olk", "at", "a"]
  • Output: True (ทั้งคู่ต่อกันได้ "kolkata")

วิธีแก้

  1. รวม Element ในแต่ละ Array เป็น String เดียว: ''.join(word1), ''.join(word2)
  2. เปรียบเทียบ 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"