给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
示例 4:
输入: s = ""
输出: 0
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
class Solution {
public int lengthOfLongestSubstring(String s) {
//初始化
int n=0;
int left =0;
int max=0;
char[] str = s.toCharArray();
int right = -1;
for(int i=0;i<str.length;left++){
/*
*left == right ——>找到一个i到right的字串
*left == str.lenght ——>这个字符串每个字符都不相同
*/
if(left == right || left==(str.length)){
//当left进入到这个判断语句里,两种情况满足其一,
//但如果是第二种,right并没有被赋值,所以不能用right去减
if(max<(left-i))
max = left-i;
//再此初始化
right =-1;
i++;
left=i;
}
for(int j=left+1;j<str.length;j++){
/*
*j负责在left右侧和right的左侧范查找和left相同的字符,并把他下标设置为right
*如果没找到right的值不会发生变化
*
*三个边界条件
*字符数组循环完毕
*j==right
*str[i]==str[j]
*/
if(j==right || j>=str.length || str[left]==str[j]){
right = j;
break;
}
}
}
return max;
}
}