สมมติว่าเรามีสตริง เราต้องหาสตริงย่อยที่ยาวที่สุดโดยไม่ใช้อักขระซ้ำ ดังนั้นหากสตริงนั้นเหมือนกับ “ABCABCBB” ผลลัพธ์จะเป็น 3 เนื่องจากมีสตริงย่อยที่ทำซ้ำ ของความยาว 3 นั่นคือ “ABC”
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้
- set i :=0, j :=0, ตั้งค่าหนึ่งแผนที่เพื่อเก็บข้อมูล
- ตอบ :=0
- ในขณะที่ j <ความยาวของสตริง s
- ถ้า s[j] ไม่มีอยู่ในแผนที่ หรือ i> map[s[j]] แล้ว
- ans :=max(ans, j – i + 1)
- map[s[j]] :=j
- อย่างอื่น
- i :=map[s[j]] + 1
- ans :=max(ans, j – i + 1)
- ลด j ทีละ 1
- เพิ่ม j ขึ้น 1
- ถ้า s[j] ไม่มีอยู่ในแผนที่ หรือ i> map[s[j]] แล้ว
- คืนสินค้า
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
class Solution(object): def lengthOfLongestSubstring(self, s): i =0 j = 0 d={} ans = 0 while j < len(s): if s[j] not in d or i>d[s[j]]: ans = max(ans,(j-i+1)) d[s[j]] = j else: i = d[s[j]]+1 ans = max(ans,(j-i+1)) j-=1 #print(ans) j+=1 return ans ob1 = Solution() print(ob1.lengthOfLongestSubstring("ABCABCBB"))
อินพุต
"ABCABCBB"
ผลลัพธ์
3