JAVA算法第一篇 · 无重复字符的最小字串
leetcode 3. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
分析思路:对于这道题,我们可以使用一个队列,当队列中没有重复的字符时,字符进队,当队列中有重复的字符时,重复字符及之前的字符全部出队,字符进队,然后判断队列长度,当队列长度大于之前标记的字符时,更新储存最长字符串的String对象
代码如下:
1 public int lengthOfLongestSubstring(String s) { 2 int max = 0; 3 int num = 0; 4 Queue<Character> queue = new LinkedList<>(); 5 for (int i = 0; i < s.length(); i++){ 6 if (!queue.contains(s.charAt(i))){ 7 queue.add(s.charAt(i)); 8 num++; 9 } 10 else{ 11 while (queue.contains(s.charAt(i))){ 12 queue.remove(); 13 num--; 14 } 15 queue.add(s.charAt(i)); 16 num++; 17 } 18 if (num > max){ 19 max = num; 20 } 21 } 22 return max; 23 }