LeetCode——Longest Substring Without Repeating Characters

来源:互联网 发布:网络ftp服务器 编辑:程序博客网 时间:2024/05/16 19:24

LeetCode——Longest Substring Without Repeating Characters 

Leetcode上第三题:

题目如下:

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.
题目翻译:

求一个字符串中最大的不含重复元素的字串


题目解析:


首先我们很容易想到一个暴力的方法,只要遍历所有的字串然后进行条件的判断。但是其时间复杂度是我们不能接受的。我们需要一种更快的算法。
对于字符串中求字串之类的问题,我们很容易想到的是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;elsecurLen++;}if (curLen > maxLen)maxLen = curLen;preLen = curLen;}return maxLen;}int main(){string s = "cababdeak";cout<<lengthOfLongestSubstring(s)<<endl;return 0;}


0 0
原创粉丝点击