Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C#을 사용하여 문자를 반복하지 않고 주어진 문자열에서 가장 긴 부분 문자열의 길이를 찾는 방법은 무엇입니까?


주어진 문자열 입력에서 2개의 포인터 i 및 j를 사용하여 슬라이딩 창 기술을 사용합니다. i와 j는 모두 문자열에서 같은 문자를 가리킵니다. 문자열을 탐색하고 목록에 추가합니다. 반복되는 문자가 발견되면 목록에서 제거하고 목록에 추가하십시오.

예시 1

입력 − s ="abcabcbb"

출력 - 3

설명 − 답은 길이가 3인 "abc"입니다.

예시 2

입력 - s ="bbbbbb"

출력 − 1

설명 − 답은 길이가 1인 "b"입니다.

시간 복잡도 - 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