Given a string, find the length of the longest substring without repeating characters.
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
Example 1:
Input: “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:
Input: “pwwkew”
Output: 3
Explanation: 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.
/*boolean类型的数组和int类型的数组是一样的
只不过 boolean类型数组中的每个元素都是boolean类型的
如果不赋初值的话 数组中每个boolean元素都默认为false的
*/
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s == null || s.length() == 0)
return 0;
int left = 0, right = 0;
int n = s.length();
boolean[] used = new boolean[128];
int max = 0;
while(right < n){
if(used[s.charAt(right)]==false){ //字符char会被转为int值(根据ASCII码表对应)
used[s.charAt(right)]=true;
right++;
}else{
max=Math.max(max,right-left);
while(left<right && s.charAt(right) != s.charAt(left)){
used[s.charAt(left)]=false;
left++;
}
left++;
right++;
}
}
max=Math.max(max,right-left);
return max;
}
}