สมมติว่าเรามีสตริง S เราต้องหาสตริงที่กลับด้านโดยที่อักขระทั้งหมดที่ไม่ใช่ตัวอักษรจะไม่เปลี่ยนตำแหน่งและตัวอักษรทั้งหมดกลับตำแหน่ง ดังนั้น หากสตริงที่ระบุคือ "a-bC-dEf-ghIj" ผลลัพธ์จะเป็น "j-Ih-gfE-dCba"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- เราจะใช้ไลบรารีนิพจน์ทั่วไปเพื่อแก้ปัญหานี้
- ถ้า S ว่างเปล่า ให้คืนค่า S
- str :=สตริงว่าง index1 :=0 และ index2 :=ความยาวของ S – 1
- ในขณะที่ index1 <ความยาวของ S
- ถ้า index2>=0 และ S[index1] เป็นตัวอักษร และ S[index2] เป็นตัวอักษร
- str :=str + S[ดัชนี2]
- ลดดัชนี2 ขึ้น 1 และเพิ่มดัชนี1 ขึ้น 1
- มิฉะนั้น ถ้า S[index1] เป็นตัวอักษร ให้ลด index2 ลง 1
- มิฉะนั้น ถ้า S[index1] ไม่ใช่ตัวอักษร ให้ str :=str + S[index1] เพิ่ม index1 ขึ้น 1
- มิฉะนั้น ลดดัชนี2 ขึ้น 1 และเพิ่มดัชนี1 ขึ้น 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): #print(index1,index2) 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"