[Leetcode은 / 해시 테이블 없음 긴 문자열 (+ 해시 세트 슬라이딩 윈도우)을 반복하지

문제 설명 :

문자열을 감안할 때, 당신은 반복 문자를 포함하지 않는 찾을  가장 긴 문자열의  길이를.

예 1 :

입력 : "abcabcbb"
 출력 : 3 
 설명 : 문자의 긴 문자열이 더 반복 없기 때문에 "abc",所以其길이는 3입니다.

예 2 :

입력 : "BBBBB"
 출력 : 1
 설명 : 문자의 긴 문자열이 반복되지 않기 때문에 "b",이 길이는 1 있도록합니다.

예 3 :

입력 : "pwwkew"
 출력 : 3
 설명 : 문자의 긴 문자열이 반복되지 않기 때문에  "wke", 그래서 3의 길이 그. 
     당신의 대답이 있어야합니다 있습니다 문자열 의 길이, "pwke" A는 서브 시퀀스 가 아닌 문자열입니다.

기본적인 아이디어 :

다시 문장 해시 세트를 사용하여, 슬라이딩 윈도우를 사용하는 아이디어.

당신이 반복 요소가 발생하는 경우, 포인터의 앞에 지속적으로 반복되는 요소 스캔 다음 요소까지 앞으로 스캔합니다.

AC 코드 :

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
      // 处理特殊情况
      if (s == "") return 0;
      int i = 0, j = 1;     // 记录我们窗口的起末索引
      unordered_set<char> hashset;    // 记录窗口中的内容
      hashset.insert(s[i]);
      int max_len = 1;
      while (j != s.size()) {
        if (hashset.count(s[j])) {    // 如果这个元素已经存在
          while (s[i] != s[j]) {
            hashset.erase(s[i]);
            ++i;
          }
          hashset.erase(s[i++]);     // 把重复的元素也给删咯
        } else {
          hashset.insert(s[j++]);
          // 注意无符号数和有符号数之间的比较。
          max_len = hashset.size() > max_len? hashset.size() : max_len;
        }
      }
      return max_len;
    }
};

다른 경험 :

  1.  내 아들은 unordered_set 속도가 훨씬 빨리 후 나는 변경, 정말 느린 설정 옳았다. 설정 삽입 및 쿼리 작업을 느리게하기 때문이다. 우리 unordered_set 평균 시간 복잡도는 O (1)이다. 그래서 미래는 unordered_set를 사용하는 것이 좋습니다.
  2. 부호 및 기호의 특정 번호로 지불 관심에 더 많은 시간을 - 예를 들어, 우리는 최대 값을 찾아, 최대 값은 우리 수도 INT_MIN를 시작하도록 설정되어,이 음의 번호입니다, 그것은 자동으로 말하자면 size_type 타입의 비교를 켜집니다 양수, 가기 어렵다.
게시 된 137 개 원래 기사 · 원 찬양 19 ·은 10000 +를 볼

추천

출처blog.csdn.net/qq_43338695/article/details/102752951