无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
使用动态规划的思想,每探索到一个字符就更新它此时处于的子串的长度,并记录是否是最大长度。
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; } };