题目描述
给定一个字符串,请你找出其中**不含有重复字符的 最长子串 **的长度。
示例
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
思路
哈希表+双指针
见备注
代码
class Solution {
int hash(char key){//定义哈希算法
return key;
}
public int lengthOfLongestSubstring(String s) {
int len = s.length();
int res = 0,
left = 0,
right = 0;
char[] chs = new char[128];
while(right < len){//右指针后移,不超过源字符串长度
char rightChar = s.charAt(right);
char c = chs[(chs.length - 1) & hash(rightChar)];//哈希算法计算索引
if(rightChar != c){//未重复出现
//记录到哈希表中,移动右指针计算长度
right++;
chs[(chs.length - 1) & hash(rightChar)] = rightChar;
int size = right - left;
res = res > size ? res : size;
}else{
//删除左指针元素,左指针右移动
char leftChar = s.charAt(left);
left++;
chs[(chs.length - 1) & hash(leftChar)] = '\u0000';
}
}
return res;
}
}