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

วิธีค้นหาความยาวของสตริงย่อยที่ยาวที่สุดจากสตริงที่กำหนดโดยไม่ใช้อักขระซ้ำโดยใช้ C #


จากอินพุตสตริงที่กำหนด ให้ใช้เทคนิคหน้าต่างบานเลื่อนโดยมีตัวชี้ 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