无重复字符的最长子串

Posted xxzkj1517

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无重复字符的最长子串相关的知识,希望对你有一定的参考价值。

给定一个字符串,找出不含有重复字符的 最长子串 的长度。

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。

 

思路:首先其只要求返回最长子串长度,这比返回第一个最长子串应该简单把。

很容易想到,遍历字符串s,用一个中转字符串p作为储存当前没出现重复的字串,

然后,当访问到s字符串的某个字符时,利用string的find算法查找其是否在p出现,

不在p出现,即可把该字符加入p字符串;

当其p出现,就把p中从开头到该字符串出现的位置的字符全部删除,然后把该字符加入p

例如p为abc,当访问到s的第四个字符a时,就把p中a删除,把a加入该字符,

操作后p=bca,然后比较p字符串长度与res的大小,把大的值赋给res即可。

 

代码:

class Solution {
public:
int lengthOfLongestSubstring(string s) {
  int res=0;
  int cur=0;
  string p="";
  for(unsigned int i=0;i<s.size();i++)
  {
    if(p.find(s[i],0)==-1)
      p+=s[i];
    else 
    {
      if(p.size()>res)
        res=p.size();
      int pos=p.find(s[i],0);
      p=p.erase(0,pos+1);
      p+=s[i];
    }
  }
  if(p.size()>res)
    res=p.size();
  return res;
}
};

以上是关于无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章

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

符串的最长无重复字符的子串长度

算法--最长无重复字符子串

Leetcode 3.无重复字符的最长子串(带图)

无重复字符的最长子串

无重复字符的最长子串