leetcode_字节跳动_挑战字符串_无重复字符的最长子串

  无重复字符的最长子串
 

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 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;
    }
};

 

posted @ 2020-07-09 22:47  dragonsbug  阅读(166)  评论(0编辑  收藏  举报