Longest Substring Without Repeating Characters

题目

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given “abcabcbb”, the answer is “abc”, which the length is 3.

Given “bbbbb”, the answer is “b”, with the length of 1.

Given “pwwkew”, the answer is “wke”, with the length of 3. Note that the answer must be a substring, “pwke” is a subsequence and not a substring.

Subscribe to see which companies asked this question

思路

0.可以使用动态规划求解,但是个人感觉就是直接查询一次最简单。
1.首先判断字符串是否为空,为空,直接返回0
2.不为空,就从字符串的第0个字符开始查找,依次检查,设当前查找的字符串的起始位置为start, 其结束位置肯定为当前正在遍历的字符串索引序号,如果当前的字符还没有在当前子串中出现(它的位置记录为-1或者小于start),那么直接加入到当前子串;如果已经在当前子串中出现,那么此时不重复的子串就被打断,应该更新子串,将当前的子串的开始start更改为当前字符出现位置的下一个,然后可以将当前字符包入已更新的子串。每次加入新字符的时候要判断是否更新已经找到的最大值。

class Solution {
public:
    int pos[1000];
    int start{0},len{0};          //当前正在找的
    int max_s{0},max_e{0},max_l{0};      //已经找到的最短的
    int lengthOfLongestSubstring(string s) {
        if(s.size()==0) return 0;
        memset(pos,-1,1000);
        for(int index=0; index<s.size();++index){
            if(pos[s[index]]>=start){ //已经出现在当前的子串中
               start = pos[s[index]]+1;
            }
            len=index-start+1;
            if(len>max_l){
                    max_l=len;
                    max_s=start;
                    max_e=index;
            }
            pos[s[index]]=index;
        }
        return max_l;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值