สมมติว่าเรามีสตริง S เราต้องหาสตริงที่กลับตัวอักษรภาษาอังกฤษเท่านั้น โดยตัวอักษรที่ไม่ใช่ภาษาอังกฤษจะไม่เปลี่ยนตำแหน่ง และตัวอักษรภาษาอังกฤษจะกลับตำแหน่งกันไป เช่น ถ้าสตริงที่กำหนดคือ "a-bC-dEf-ghIj" ผลลัพธ์จะเป็น "j-Ih-gfE-dCba"
วิธีการแก้ปัญหา
- ใช้ไลบรารี regular expression ในการแก้ปัญหา
- ถ้า S ว่าง ให้คืนค่า S
- str := สตริงว่าง, index1 := 0 และ index2 := ความยาวของ S - 1
- while index1 < ความยาวของ S:
- ถ้า index2 >= 0 และ S[index1] เป็นตัวอักษร และ S[index2] เป็นตัวอักษร:
- str := str + S[index2]
- ลด index2 ลง 1 และเพิ่ม index1 ขึ้น 1
- else if S[index1] เป็นตัวอักษร ให้ลด index2 ลง 1
- else if S[index1] ไม่ใช่ตัวอักษร ให้ str := str + S[index1], เพิ่ม index1 ขึ้น 1
- else ลด index2 ลง 1 และเพิ่ม index1 ขึ้น 1
- ถ้า index2 >= 0 และ S[index1] เป็นตัวอักษร และ S[index2] เป็นตัวอักษร:
- คืนค่า str
ตัวอย่างโค้ด
class Solution:
def reverseOnlyLetters(self, S):
if not S:
return S
str_ = ""
index1 = 0
index2 = len(S) - 1
while index1 < len(S):
if index2 >= 0 and S[index1].isalpha() and S[index2].isalpha():
str_ += S[index2]
index2 -= 1
index1 += 1
elif S[index1].isalpha():
index2 -= 1
elif not S[index1].isalpha():
str_ += S[index1]
index1 += 1
else:
index2 -= 1
index1 += 1
return str_
ob1 = Solution()
print(ob1.reverseOnlyLetters("a-bC-dEf-ghIj"))
อินพุต
"a-bC-dEf-ghIj"
เอาต์พุต
"j-Ih-gfE-dCba"