Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าสองสตริงเทียบเท่าหรือไม่ตามเงื่อนไขที่กำหนดใน Python


สมมติว่าเรามีสตริง s และ t สองสตริงที่มีขนาดเท่ากัน เราต้องตรวจสอบว่า s กับ t เท่ากันหรือไม่ มีเงื่อนไขบางประการที่ต้องตรวจสอบ:

  • ทั้งสองมีค่าเท่ากัน หรือ
  • หากเราแบ่ง s ออกเป็นสองสตริงย่อยที่อยู่ติดกันที่มีขนาดเท่ากัน และสตริงย่อยคือ s1 และ s2 และยังแบ่ง t เหมือนกัน เช่น s ออกเป็น t1 และ t2 ดังนั้นสิ่งใดสิ่งหนึ่งต่อไปนี้ควรถูกต้อง:
    • s1 เรียกซ้ำเทียบเท่ากับ t1 และ s2 เรียกซ้ำเทียบเท่ากับ t2
    • s1 เรียกซ้ำเทียบเท่ากับ t2 และ s2 เรียกซ้ำเทียบเท่ากับ t1

ดังนั้น หากอินพุตเป็น s ="ppqp" t ="pqpp" ผลลัพธ์จะเป็น True ราวกับว่าเราแบ่ง s และ t ออกเป็นสองส่วน s1 ="pp", s2 ="qp" และ t1 ="pq ", t2 ="pp" ในที่นี้ s1 =t2 และถ้าเราแบ่ง s2 และ t1 ออกเป็นสองส่วน s21 ="q", s22 ="p", t11 ="p", t12 ="q" ตรงนี้ s21 =t12 และ s22 =t11 ดังนั้นจึงเทียบเท่าแบบเรียกซ้ำ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน util() นี่จะใช้เวลา s
  • ถ้าขนาด s เป็นเลขคี่
    • คืนสินค้า
  • left :=util(left half part of s)
  • ขวา :=util(ครึ่งขวาของ s)
  • คืนค่าต่ำสุดของ (ซ้ายต่อขวา), (ขวาต่อซ้าย)
  • จากวิธีหลักคืนค่าจริงเมื่อ util(s) เหมือนกับ util(t) มิฉะนั้นเป็นเท็จ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

โค้ดตัวอย่าง

def util(s):
   if len(s) & 1 != 0:
      return s
 
   left = util(s[0:int(len(s) / 2)])
   right = util(s[int(len(s) / 2):len(s)])
 
   return min(left + right, right + left)
 
def solve(s,t):
   return util(s) == util(t)

s = "ppqp"
t = "pqpp"
print(solve(s, t))

อินพุต

"ppqp", "pqpp"

ผลลัพธ์

True