LeetCode 3. 无重复字符的最长子串 c++

关于这道题的解法


 

今天我重刷这道题的时候发现比以前慢许多

 

 

我这次用的unordered_set 装下了遍历过元素 所以很慢

重点说之前的解法

现在看以前我自己的解法

看半天才看懂

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.size()==0) return 0;
        if(s.size()==1) return 1;
        int max=0,i,j,cnt,p=0;
        for(i=1;i<s.size();++i){
            cnt=1;
            for(j=p;j<i;++j){
                if(s[i]!=s[j])++cnt;
                else {
                    p=j+1;
                    break;
                }
            }
            if(cnt>max)max=cnt;
        }
        return max;
    }
};

这里外层循环下标是从 1 开始的

内层从0开始

相当于是 把 i 之前的 元素用内层循环(p开始)遍历每个元素

在遍历到第i个时 i之前的重复的子串已经被淘汰(用p元素淘汰)

这种解法的优点:

越到后面需要遍历的内存循环越少(以为在之前都被用变量p淘汰了)

2021-10-1212:48:41更新------------------------------------

 

 

posted @ 2021-10-12 12:50  努力挣钱  阅读(29)  评论(0)    收藏  举报