給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。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; } };