class Solution {
public int lengthOfLongestSubstring(String s) {
//首先判断参数如果长度为0直接啥也不做
if(s.length() == 0){
return 0;
}
//表示最长的长度
int result = 0;
//使用一个标志位用来记录有几个重复的字符
int mark = 0;
//左右指针
//由于左指针要从第一个元素开始判断所以赋予初始值为-1
int left = -1;
int right = 0;
//使用一个长度为256的数组模拟hash用于记录字符出现的次数,数组的下标作为key代表表示的是哪个字符,value则代表出现的次数
int hash[] = new int[256];
//遍历字符串
for(;right < s.length();right++){
//加入s.charAt(right),判断标志位的值
hash[s.charAt(right)]++;
if(hash[s.charAt(right)] == 2){
mark++;
}
//判断标志位如果出现重复的元素则逐个右以左指针直到标志位正常
while(mark > 0){
if(--hash[s.charAt(++left)] == 1){
mark--;
}
}
//打擂台的方式记录下最长不重复字符串的长度
result = Math.max(right - left,result);
}
return result;
}
}
剑指 Offer 48. 最长不含重复字符的子字符串java实现
最新推荐文章于 2022-07-06 22:05:16 发布