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.
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s == null){
return 0;
}
char[] sc = s.toCharArray();
if(sc.length > 1){
return countLongestSubstring(sc);
}
return sc.length;
}
/**
* counter longest substring
*/
private int countLongestSubstring(char[] sc){
// current save substring list
List<Character> currentSubstring = new ArrayList<>();
// longest substring list
List<Character> longestSubstring = new ArrayList<>();
// flag index
int flagIndex = 0;
for (int i = 0;i < sc.length; i++) {
char item = sc[i];
if (!currentSubstring.contains(item)) {
// add to list
currentSubstring.add(item);
} else {
if (longestSubstring.size() < currentSubstring.size()) {
// evalution value
longestSubstring = currentSubstring;
}
// judge index
if(flagIndex < sc.length -1){
i = flagIndex + 1;
flagIndex = i;
item = sc[i];
}
// init value
currentSubstring = new ArrayList<>();
currentSubstring.add(item);
}
}
if (longestSubstring.size() < currentSubstring.size()) {
// evalution value
longestSubstring = currentSubstring;
}
// return result
return longestSubstring.size();
}
}