• 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;
        }
    };
    最好的开始时间是以前,其次是现在。
  • 相关阅读:
    表单控件和属性
    html5语义化标签
    移动布局
    webpack
    OMobile
    Npm的下载 安装 管理工具
    模块化开发
    百度地图
    离线缓存
    canvas和svg
  • 原文地址:https://www.cnblogs.com/dragonsbug/p/13276724.html
Copyright © 2020-2023  润新知