สมมติว่าเรามีสตริง s เราต้องหาสตริงที่เล็กที่สุดเกี่ยวกับศัพท์เฉพาะที่สามารถสร้างได้หากเราสามารถสลับระหว่างอักขระสองตัวในสตริงที่กำหนดได้มากที่สุดหนึ่งครั้ง
ดังนั้น หากอินพุตเป็นเหมือน "zyzx" เอาต์พุตจะเป็น "xyzz"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- temp :=อาร์เรย์ขนาด s และเติม 0
- m:=ขนาด s - 1
- สำหรับฉันในช่วงขนาด s -1 ถึง -1 ลดลง 1 ทำ
- ถ้า s[i]
- ม :=ผม
- ถ้า s[i]
- อุณหภูมิ[i] :=ม.
- สำหรับฉันในช่วง 0 ถึงขนาดของ s ทำ
- a :=temp[i]
- ถ้า s[a] ไม่เหมือนกับ s[i] แล้ว
- ส่งคืนสตริงย่อยของ s [จากดัชนี 0 ถึง i] เชื่อม s[a] สตริงย่อยของ s [จากดัชนี i+1 ถึง a] ต่อ s[i] ต่อสตริงย่อยของ s [จากดัชนี a+1 ถึงปลาย]หลี่>
ตัวอย่าง
class Solution:
def solve(self, s):
temp = [0]*len(s)
m=len(s)-1
for i in range(len(s)-1, -1, -1):
if s[i]<s[m]: m=i
temp[i] = m
for i in range(len(s)):
a = temp[i]
if s[a] != s[i]:
return s[:i]+s[a]+s[i+1:a]+s[i]+s[a+1:]
return s
ob = Solution()
print(ob.solve("zyzx")) อินพุต
zyzx
ผลลัพธ์
xyzz