จากอินพุตสตริงที่กำหนด ให้ใช้เทคนิคหน้าต่างบานเลื่อนโดยมีตัวชี้ 2 ตัว i และ j ทั้ง i และ j จะชี้ไปที่อักขระเดียวกันในสตริง ข้ามผ่านสตริงและเพิ่มลงในรายการ หากพบอักขระที่ซ้ำกัน ให้ลบออกจากรายการ มิฉะนั้น ให้ต่อท้ายรายการ
ตัวอย่างที่ 1
ป้อนข้อมูล − s ="abcabcbb"
ผลลัพธ์ − 3
คำอธิบาย − คำตอบคือ "abc" โดยมีความยาวเท่ากับ 3
ตัวอย่างที่ 2
ป้อนข้อมูล − s ="bbbbb"
ผลลัพธ์ − 1
คำอธิบาย − คำตอบคือ "b" โดยมีความยาวเท่ากับ 1
ความซับซ้อนของเวลา − O(N)
ความซับซ้อนของอวกาศ − O(N)
ตัวอย่าง
public class Arrays{
public int LongestSubstringWithNoRepeatingCharacters(string s){
List<char> c = new List<char>();
int iPointer = 0;
int jpointer = 0;
int max = 0;
while (jpointer < s.Length){
if (c.Contains(s[jpointer])){
c.Remove(s[iPointer]);
iPointer++;
}
else{
max = Math.Max(c.Count(), max);
c.Add(s[jpointer]);
jpointer++;
}
}
return max;
}
}
static void Main(string[] args){
int res = s.LongestSubstringWithNoRepeatingCharacters("abcabcbb");
Console.WriteLine(res);
} ผลลัพธ์
2