您的位置:首页 > 其它

leetcode - 3.Longest Substring Without Repeating Characters

2017-03-02 19:42 260 查看

Longest Substring Without Repeating Characters

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

Examples:

Given
"abcabcbb"
, the answer is
"abc"
, which the length is 3.

Given
"bbbbb"
, the answer is
"b"
, with the length of 1.

Given
"pwwkew"
, the answer is
"wke"
, with the length of 3. Note that the answer must be a substring,
"pwke"
is a subsequence and not a substring.

thinking:

使用动态规划的思想,动态计算最大长度

bacdfeaads
|   |
==> 向最大字符串内添加一个字符
bacdfeaads
|    |
==> 下一个字符是重复字符
bacdfeaads
|  |
==> 将head后移
bacdfeaads
|   |
==> 添加
...


Solution1:

public int lengthOfLongestSubstring(String s) {
int head = 0;
int tail = 0;
int longest = 0;
int length = s.length();
String now;
String letter;

for (; tail < length; tail++) {
now = s.substring(head, tail);
letter = s.substring(tail, tail + 1);

if (now.indexOf(letter) < 0) {
if (longest < now.length() + 1) {
longest = now.length() + 1;
}
} else {
head = s.indexOf(letter, head) + 1;
}
}
return longest;
}


Soluction2:

答案

public int lengthOfLongestSubstring1(String s) {
int[] letters = new int[128];
int longest = 0;
int index = 0;

for(int i = 0; i < s.length(); i++){
index = Math.max(letters[s.charAt(i)], index);

longest = Math.max(i - index + 1, longest);
//+1有深意
//  1. s可能是"" => longest不能为1
//  2. s的长度可能是1 => i - index + 1
//综上两个原因 => i + 1
letters[s.charAt(i)] = i + 1;
}

return longest;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode