Longest Substring Without Repeating Characters

难度:Medium

题目网址:LeetCode

问题描述:

Given a string, find the length of the longest substring without repeating characters.

Example 1:

1
2
3
4
> Input: "abcabcbb"
> Output: 3
> Explanation: The answer is "abc", with the length of 3.
>

解题思路:

本题其实不是很难,但是由于我好久没打代码了,结果想了一个多小时,果然是个小辣鸡。

首先,使用index记录最新不重复子串的起始下标,然后一直比较到i-1,若在这个子串中并无与s[i]重复的字符,则子串长度加一,与返回结果的长度相比较,若大于,则最终的result。若在子串中出现了与s[i]重复的字符,则下一次开始的i应与这一次的i相同,因为不能确定出现重复的字符有没有在子串中继续出现,所以直到确认目前子串中并无与s[i]相同的字符,i再进行加一。

需要注意的是,我引入了一个flag变量,用于表示子串中是否无与s[i]相同的字符,若无,则由于循环的特性,无法在循环体内进行最后的加一,挪到外部进行操作。

参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int result = 0, ans = 0;
int index = 0;
for(int i = 0;i < s.length();i++){
int j = index;
int flag = 0;
for(;j < i;j++){
if(s[i]==s[j]){
index++;
i--;
ans = 0;
flag = 1;
break;
}else{
ans++;
}
}
if(flag == 0){
ans++;
}
if(ans>result){
result = ans;
}
ans = 0;
}
return result;
}
};
分享到 评论