Given a string s, find the length of the longest substring without repeating characters.
Example 1:
Input: s = “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: s = “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1。
Example 3:
Input: s = “pwwkew”
Output: 3
Explanation: The answer is “wke”, with the length of 3.
Notice that the answer must be a substring, “pwke” is a subsequence and not a substring.
Constraints:
- 0 <= s.length <= 5 * 104
- s consists of English letters, digits, symbols and spaces.
Solution1 dual circulation
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length() == 0) {
return 0;
}
int currentLongest = 1;
for (int i = 0; i < s.length(); i++) {
StringBuilder sb = new StringBuilder();
sb.append(s.charAt(i));
for (int j = i + 1; j < s.length(); j++) {
if (sb.toString().contains(Character.toString(s.charAt(j)))) {
break;
} else {
sb.append(s.charAt(j));
}
}
currentLongest = Math.max(currentLongest, sb.length());
}
return currentLongest;
}
}
Solution2 dual circulation
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet<Character>();
int left = 0 ,right = 0, res = 0;
while(right < s.length()){
char c = s.charAt(right++);
while(set.contains(c)){
set.remove(s.charAt(left++));
}
set.add(c);
res = Math.max(res, right - left);
}
return res;
}
}