zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    最好的开始时间是以前,其次是现在。
  • 相关阅读:
    ADO数据库操作
    AfxMessageBox和MessageBox区别
    Qt — 子窗体操作父窗体中的方法
    Qt — tableWidget插入复选框
    Qt & MySQL
    windows下安装Qt
    Extjs — Grid数据导出成Excel
    Mac终端 vi/vim 的简单使用
    iOS开发CocoaPods使用说明
    Shell 脚本学习笔记十:Shell输入输出重定向
  • 原文地址:https://www.cnblogs.com/dragonsbug/p/13276724.html
Copyright © 2011-2022 走看看