เช่น "ccddcc" ในสตริง "abaccddccefe"
ฉันคิดวิธีแก้ปัญหา แต่มันทำงานในเวลา O (n ^ 2)
อัลโก 1:
ขั้นตอน: มันเป็นวิธีการบังคับที่ดุร้าย
- มี 2 สำหรับลูป
สำหรับ i = 1 ถึง i น้อยกว่า array.length -1
สำหรับ j = i + 1 ถึง j น้อยกว่า array.length - ด้วยวิธีนี้คุณจะได้รับสตริงย่อยของชุดค่าผสมที่เป็นไปได้ทั้งหมดจากอาร์เรย์
- มีฟังก์ชัน palindrome ซึ่งตรวจสอบว่าสตริงเป็น palindrome หรือไม่
- ดังนั้นสำหรับทุกสตริงย่อย (i, j) เรียกใช้ฟังก์ชันนี้หากเป็นพาลินโดรมเก็บไว้ในตัวแปรสตริง
- หากคุณพบสตริงย่อยของพาลินโดรมถัดไปและหากมีค่ามากกว่าสตริงปัจจุบันให้แทนที่ด้วยสตริงปัจจุบัน
- ในที่สุดตัวแปรสตริงของคุณจะมีคำตอบ
ประเด็น: 1. อัลโกนี้ทำงานในเวลา O (n ^ 2)
อัลโก 2:
- ย้อนกลับสตริงและเก็บไว้ในอาร์เรย์ที่แตกต่างกัน
- ตอนนี้ค้นหาสตริงย่อยที่ตรงกันที่ใหญ่ที่สุดระหว่างอาร์เรย์ทั้งสอง
- แต่สิ่งนี้ก็ทำงานในเวลา O (n ^ 2) เช่นกัน
พวกคุณนึกถึงอัลโกที่วิ่งในเวลาที่ดีกว่าได้ไหม ถ้าเป็นไปได้ O (n) เวลา
O(n^2)
การรับสตริงย่อย *O(n)
เพื่อตรวจสอบว่าเป็น palindromesO(n^3)
หรือไม่โดยรวม