题目链接:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
算法思想:
使用滑动窗口的思想来解决,定义两个指针left和right均指向下标0,right指针用来遍历字符串,将right指针对应的元素入窗口,定义一个哈希表,哈希表用来存储对应字符出现的次数,每次入窗口之后要进行判断,判断窗口内是否出现重复字符,如果有重复字符需要出窗口,通过left指针完成出窗口的操作(从哈希表中删除该字符),最后更新结果
public int lengthOfLongestSubstring(String s) {
int[] hash = new int[128]; //用数组模拟哈希表存放字符
char[] ch = s.toCharArray();
int left = 0;
int right = 0;
int ret = 0;
int n = s.length();
while(right < n) {
hash[ch[right]]++; //进入窗口
while(hash[ch[right]] > 1) { //判断
hash[ch[left++]]--; //出窗口
}
ret = Math.max(ret,right - left + 1); //更新结果
right++; //让下一个字符进入窗口
}
return ret;
}
注意:内层的while循环是进行出窗口的操作,这里的出窗口操作可能要进行多次,所以使用while而不是if