思路:
首先需要将字符串转化为字符数组(char arr[ ]),便于后续进行字符的遍历,无重复字符的最长子序列是一串连续的字符序列,我们使用一个数组(int a[ ])去储存一个字符出现的次数, 我们需要两个指针(左指针j,右指针i),接着去遍历数组,每当右指针 i 指向新的字符时,字符数组(arr)记录该字符出现次数+1,当一个字符再次遇到相同字符时说明左指针 j 已经遇到过该字符了,所以此时这段 j~i 的序列存在相同字符 ,这个时候我们需要将第一次 j 遇到的该字符移除 ,a[ char [ j-- ] ] ,并且让左指针 j 不断向前直到序列不存在相同字符 ,返回长度结果用res记录,每次循环结束取上次记录 长度res 和 新的循环序列长度 (i - j +1)中的最大值,然后赋给res,最后返回res
代码实现如下:
class Solution {
public int lengthOfLongestSubstring(String s) {
//如果该字符串为空或长度为0 直接返回
if(s==null || s.length()==0) return 0;
//字符串转化为字符数组
char arr[] =s.toCharArray();
//记录字符出现次数的数组
int a[]=new int[1000];
int res=0;
int j=0;
for( int i=0 ; i< arr.length ; i++){
a[arr[i]]++;
while(a[arr[i]]>1){
a[arr[j]]--;
j++;
}
res=Math.max(res,i-j+1);
}
return res;
}
}