public static int lengthOfLongestSubstring(String s) {
//无重复字符的最长子串
//使用hashmap作为滑动窗口
HashMap<Character,Integer> hashMap = new HashMap<>();
int l = s.length(), ans = 0;
//定义两个指针,作为窗口的边界
//遍历字符串,左指针不动,右指针移动
for (int i = 0,j = 0; j < l; j++) {
//判断hashmap中是否包含字符
if(hashMap.containsKey(s.charAt(j))){
//如果包含,左指针直接移动到重复字符处
//注意,有可能存在左指针以左的值与右指针的值重复,但此时左指针以左的值不在考虑范围内,所以用Math.max()方法
i = Math.max(hashMap.get(s.charAt(j)),i);
}
//结果值,取结果值与当前窗口大小的较大值
ans = Math.max(ans,(j-i));
//将右指针所指的值put进hashmap,右指针右移
hashMap.put(s.charAt(j),j);
}
//返回结果值
return ans;
}
无重复字符的最长子串-----leetcode笔记
最新推荐文章于 2024-07-24 16:46:42 发布