Computer >> Máy Tính >  >> Lập trình >> C#

Làm thế nào để tìm độ dài của chuỗi con dài nhất từ ​​chuỗi đã cho mà không cần lặp lại các ký tự bằng cách sử dụng C #?


Từ đầu vào chuỗi đã cho, sử dụng kỹ thuật cửa sổ trượt bằng cách có 2 con trỏ i và j. cả i và j sẽ trỏ đến cùng một ký tự trong chuỗi. Duyệt qua chuỗi và thêm nó vào danh sách. Nếu ký tự lặp lại được tìm thấy thì hãy xóa ký tự đó khỏi danh sách, nếu không, hãy thêm vào danh sách.

Ví dụ 1

Đầu vào - s ="abcabcbb"

Đầu ra - 3

Giải thích - Câu trả lời là "abc", với độ dài là 3.

Ví dụ 2

Đầu vào - s ="bbbbb"

Đầu ra - 1

Giải thích - Câu trả lời là "b", với độ dài là 1.

Độ phức tạp về thời gian - O (N)

Độ phức tạp của không gian - O (N)

Ví dụ

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);
}

Đầu ra

2