สมมติว่าเรามีสตริง 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"