โจทย์
มีอาร์เรย์ของสตริงที่มีความยาวเท่ากัน ต้องการตรวจสอบว่ามีคู่สตริงใดคู่หนึ่งที่ต่างกันเพียงตัวอักษรเดียวที่ ตำแหน่งเดียวกัน หรือไม่ ถ้ามีคืน True ไม่งั้น False
ตัวอย่าง: dict = ['pqrs', 'prqs', 'paqs'] → True เพราะทุกคู่ต่างกันที่ดัชนี 1
อัลกอริธึม
- สร้าง Set
seensเก็บสตริงที่ "มาสก์" ตัวอักษรทีละตำแหน่ง - วนแต่ละคำ สร้าง
masked_wordโดยแทนที่ตัวอักษรตำแหน่ง i ด้วย '.' - ถ้า
masked_wordอยู่ในseensแล้ว → คืนTrue - จบลูปไม่พบ → คืน
False
โค้ด Python
def solve(dict):
seens = set()
for word in dict:
for i, c in enumerate(word):
masked_word = word[:i] + '.' + word[i+1:]
if masked_word in seens:
return True
else:
seens.add(masked_word)
return False
print(solve(['pqrs', 'prqs', 'paqs'])) # Output: True
Input / Output
Input: ['pqrs', 'prqs', 'paqs']
Output: True