zoukankan      html  css  js  c++  java
  • leetcode第三题--Longest Substring Without Repeating Characters

    Problem:Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

    意思是给定字符串s, 返回最长的没有重复字符的字符串的长度。例如“abcddd”就是“abcd”长度为4,这题我自己试了试发现不是错误就是超时。最终还是不得不参考了其他大神。代码如下:

    class Solution
    {
    public:
    int lengthOfLongestSubstring(string s)
    {
        int start = 0;
        int max = 0;
        int len = s.length();
        if( len == 0)
            return 0;
        if (len ==1)
            return 1;
    
        for (int i = 1; i < len; i++)
        {
            for (int j = i - 1; j >= start; j--) // 注意了是 >=  忘记=就错了
            {
                if (s[i] == s[j])
                {
                    start = j + 1;
                    break;
                }
                else
                {
                    if (max < i - j + 1)
                        max = i - j + 1;
                }
            }
        }
        return max;
    }
    };

    如果输入的字符串为空后者为一,可以直接返回长度零或者1。

    如果输入的长度大于1,那么我们就可以从下标1个开始(因为下标是从零开始的,所以下标1其实是第二个)

    每次都只需要判断当前往回回溯到start点有没有重复字符。注意了这里的start不总是指第一个字符,而是根据相同字符在变。

    举个例子吧:abcabcdf

    第一次的时候当前的为第二个字符,也就是b,这时前面只有一个a,没有重复,所以记录i-j+1为2到max中,同样c的时候max就是3了,再到第二个a的时候,我们可以注意到现在的最大长度已经在刚才c的时候记录了。这时因为重复了这是第一次发现有重复的字符,所以我们的答案中肯定不可能包含这两个重复字符(因为题目要求就是不重复)。那么由于前面的可能的最大字符已经记录在max了。我们只需把start点定位到第一个重复字符的下一位,此例中是b。

    同样在继续当前已经到第二个b了发现重复,再把start点定位到c,继续,当前到第二个c,又重复,则start定位到a,当前点到d,此时i-j+1是4,更新max,最后当前到f,max更新为5

    所以此例最终答案为5.就是这样了。

  • 相关阅读:
    图像处理国际会议
    [2015更新]用Word2007写CSDN博客
    【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结
    奇异秀App:奇异秀秀奇异,用大头视频来拜年
    通俗讲解傅里叶级数
    LIBSVM的使用方法
    VC6.0的工程设置解读Project--Settings
    HOG:从理论到OpenCV实践
    如何在 Kaggle 首战中进入前 10%
    linux学习(2)
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4012326.html
Copyright © 2011-2022 走看看