给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
示例一:
示例二:
示例三:
思路分析:
首先定义一个Set集合存储多个字符,同时定义一个右指针rk=-1,外层套一个循环定义左指针的初始位置,从0-s.length()-1,如果右指针右移一位后指向的元素不在集合中,且在字符串长度的范围内
,则将该字符串加入该字符集合,然后rk++,直至rk+1与集合中的元素重复则跳出循环,然后比较左右指针的跨度与max的大小,选择二者中较大的一个。比较完毕后,继续向右移动左指针的位置,继续上述的判断,但要注意,只要左指针不指向索引为0的位置,则需要首先移除集合中最左边的元素。
代码展示:
class Solution {public int lengthOfLongestSubstring(String s) {//定义一个承载字符的集合Set<Character> set=new HashSet<>();int length = s.length();//右指针int rk=-1;int max=0;for (int i=0;i<length;i++){if(i!=0){//将集合中最左边的元素set.remove(s.charAt(i-1));}while(rk+1<length && !set.contains(s.charAt(rk+1))){set.add(s.charAt(rk+1));//右指针继续右移rk++;}max=Math.max(max,rk+1-i);}return max;}}
如果觉得《LeetCode:无重复字符的最长子串》对你有帮助,请点赞、收藏,并留下你的观点哦!