扬州网站建设yzbosi校园推广
1.题目描述
2.思路
思路1:在字符串 s 中寻找最长的无重复字符子串的长度,它使用了 滑动窗口 和 HashMap 记录字符索引 的方法。
例子1:
总结:用hashmap记录键值对,键唯一,但是值可以不同。
start来更新索引,也就是遇到重复字符,说明按此顺序的字符有重复。我们应该跳到下一个字母继续执行。
补充1:
··············································································
补充2
·······························································
3.代码实现
class Solution {public int lengthOfLongestSubstring(String s) {//1.定义一个哈希表,哈希表可以满足键唯一,值不同.存储字符和字符的索引//对应到字符串就是字母一样,但是索引可以不动HashMap<Character,Integer> s1=new HashMap<>();//2.初始化无重复字符串的最大长度int maxLen=0;int start=0;for(int i=0;i<s.length();i++){char letter=s.charAt(i);//3.处理遇到重复的字符的子字符串。查找哈希表中现有的键是不是有该字符// 如果字符 letter在 HashMap 里,并且索引大于等于 start,就更新 start//比如abca,因为start=0,第四个a第二次遇到因为索引是0,等于第一次遇到的a,索引为0,但是此时用大于号,start不更新if(s1.containsKey(letter)&&s1.get(letter)>=start){start=s1.get(letter)+1;//4.更新遇到重复字符的索引}// 记录当前字符的索引s1.put(letter,i);//4.计算当前不重复的字符串的长度int currLen=i-start+1;maxLen=Math.max(currLen,maxLen);}return maxLen;}// public static void main(String args[])// {// Solution07 test=new Solution07();// String s1="abcdeasdfgh";// int num=test.lengthOfLongestSubstring(s1);// System.out.println("返回无重复字符串的长度"+num);// }
}