当前位置:   article > 正文

leetcode刷题日记---无重复字符的最长子串_leetcode无重复最长字串

leetcode无重复最长字串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

 

分析:

滑动窗口协议

简单来说就是 当第 k 个字符对应无重复字符的结束位置为rk 的时候

 那么当我们遍历第k+1个字符的时候,其结束的位置Rk+1 一定比Rk 要大,因为第k+1 与Rk 之间一定是不重复的,而且由于少了第k个字符,所以RK+1 就会比Rk 要大。所以

那么实现的思路就是 用一个HashSet 记录当前最长子串的内容,然后左边为索引i ,右边为Rk,

将Rk内容放入HashSet之前,先判断是否存在元素,如果不存在则右移Rk,如果存在则右移i,并且移除hashSet 中对应的i-1位置的元素

代码实现

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class TestController {
  4. public static void main(String args[]) {
  5. String example = "abcaddd";
  6. System.out.println(lengthOfLongestSubstring(example));
  7. }
  8. public static int lengthOfLongestSubstring(String s) {
  9. Set<Character> aloneItem = new HashSet<>();
  10. int right = 0;
  11. int n = s.length();
  12. int ans = 0;
  13. for (int left = 0; left < n; left++) {
  14. if (left != 0) {
  15. aloneItem.remove(s.charAt(left - 1));
  16. }
  17. while (right <= n-1 && !aloneItem.contains(s.charAt(right ))) {
  18. aloneItem.add(s.charAt(right));
  19. right++;
  20. }
  21. ans = Math.max(ans, right - left );
  22. }
  23. return ans;
  24. }
  25. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/182213
推荐阅读
相关标签
  

闽ICP备14008679号