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(); } }