leetcodeスライディングウィンドウ3繰り返し文字のない最長の部分文字列

記事のディレクトリ

THE

問題

解決

コード



/*
思路: 这个题没有目标值,所以就不能套用模板了。 因为need需要实时更新。  这里和之前不一样,要在收缩窗口完成后更新 

-  define window
-  define left right, maxlen = 1.
- while right<size
- -  a = s[right] right++
- -  window++; 
- -  while s[right] in window 
- - - if(right- left>maxlen) maxlen = right-left;
- - - left = right
*/





class Solution {
    
    
public:
   int lengthOfLongestSubstring(string s) {
    
    
       if(!s.size())return 0;
       
       unordered_map<char, int> window;
       int left = 0,right = 0 , maxlen = 1;
       while(right<s.size()){
    
    
           char a = s[right];
           
           window[a]++;
           right++;
           
           
           while(window[a]>1){
    
    

               char d = s[left];
               left ++;
               window[d]--;
               
           }
           if(right-left>maxlen)maxlen = right -left;
       }
       return maxlen;


   }
};


まとめと考察

  1. ここで発生する状況は1つだけなので、縮小と拡大が完了した後に結果が更新されます。

おすすめ

転載: blog.csdn.net/liupeng19970119/article/details/114106549