LeetCode——Longest Substring Without Repeating Characters
题目如下:
求一个字符串中最大的不含重复元素的字串
题目解析:
首先我们很容易想到一个暴力的方法,只要遍历所有的字串然后进行条件的判断。但是其时间复杂度是我们不能接受的。我们需要一种更快的算法。
对于字符串中求字串之类的问题,我们很容易想到的是dp的方法,在这里我们想要使用dp来完成这道题目(网上有不少使用后缀树来做这道题目的方法,也是可行的,思路相对简单,但是实现起来相比有些复杂)。接下来让我们具体的看这种算法的过程:
1. 加入第一个元素 a1 设substr = [ a1 ] ,令MAX = 1
2 对于此后每一个想要加入的新元素 a i 执行下面的策略:检测a i 是否属于 substr ,若不属于 则 substr = substr + { ai } MAX += 1
若a i 属于substr ,即在substr中存在一元素 a j = a i 则令 substr = [ a j+1 .... a i ] 令 TEMPMAX = substr的长度
3 若 TEMPMAX > MAX 则更新 MAX
4 继续从2 执行 知道所有元素判断完毕,返回MAX
#include<iostream>
#include<string>
using namespace std;
int lengthOfLongestSubstring(string s)
{
int maxLen = 0;
int preLen = 0;
for(int i=0;i<s.size();++i)
{
int curLen = 1;
for(int j = i-1;j>=i-preLen;j--)
{
if(s[j] == s[i])
break;
else
curLen++;
}
if (curLen > maxLen)
maxLen = curLen;
preLen = curLen;
}
return maxLen;
}
int main()
{
string s = "cababdeak";
cout<<lengthOfLongestSubstring(s)<<endl;
return 0;
}
2921



被折叠的 条评论
为什么被折叠?



