leetcode_字節跳動_挑戰字符串_無重複字符的最長子串

  無重複字符的最長子串
 

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。web

示例 1:數組

輸入: "abcabcbb"
輸出: 3 
解釋: 由於無重複字符的最長子串是 長度爲 3。
"abc",因此其

示例 2:app

輸入: "bbbbb"
輸出: 1
解釋: 由於無重複字符的最長子串是 ,因此其長度爲 1。
"b"

示例 3:flex

輸入: "pwwkew"
輸出: 3
解釋: 由於無重複字符的最長子串是 ,因此其長度爲 3。
     請注意,你的答案必須是 子串 的長度, 是一個子序列,不是子串。"wke""pwke"

 使用動態規劃的思想,每探索到一個字符就更新它此時處於的子串的長度,並記錄是不是最大長度。spa

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = s.length();//獲取字符串長度
        if(len==0) return 0;//空字符串返回0
        if(len==1) return 1;
        
        int *flag = new int[len];//記錄狀態
        memset(flag,0,sizeof(flag));//初始化
        int max=0,stop=0;//記錄最大值,數組分段
        int i,j;
        flag[0]=1;
        for(i=1;i<len;i++){
            for(j=i-1;j>=stop;j--){//遍歷當前子串,stop分割
                if(s[j]==s[i]) break;
            }
            if(j!=stop-1){
                stop=j+1;//dvdf----max==3
                flag[i]=i-j;
            }
            else{
                flag[i]=flag[i-1]+1;    
            }
            max = flag[i]>max?flag[i]:max;//更新max值
        }
        return max;
    }
};
相關文章
相關標籤/搜索