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.
解題思路:maxLen代表當前已經找到的滿足條件的最長子串的長度,兩個int指針start和end,s[start]至s[end-1]表示當前已經遍歷到的不含重複字符的子串,s[end]表示當前正在遍歷的字符:
如果s[end]包含在s[start]至s[end-1]的子串中,那麼找到與s[end]重複的那個字符的位置,將start移動到這個位置+1的位置,並將end++然後繼續遍歷;
如果不包含的話,那麼這時候將end-start+1與maxLen比較,如果大於maxLen,那麼替換maxLen。然後end++並繼續遍歷。
直到end的值超出字符串的長度範圍。
解題代碼:(53ms,beats 70.53%)
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length() < 2) {
return s.length();
}
int maxLen = 1, start = 0, end = 1, len = 1;
String curStr;
while (end < s.length()) {
curStr = s.substring(start, end);
if (curStr.contains(String.valueOf(s.charAt(end)))) {
start = s.indexOf(s.charAt(end), start) + 1;
end++;
continue;
}
len = end - start + 1;
if (len > maxLen) {
maxLen = len;
}
end++;
}
return maxLen;
}
}