当前位置:   article > 正文

LeetCode||无重复字符的最长子串--给定一个字符串,找出其中不含有重复字符的最长子串的长度。_import java.util.hashset; import java.util.scanner

import java.util.hashset; import java.util.scanner; import java.util.set; pu

题目描述:

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

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

请注意,必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

步骤:

  1. 遍历数组,第一个不重复子字符串为最长字符串。
  2. 如果当前字符不存在于子字符串,加入子字符串
  3. 如果当前字符串长度大于最长字符串,当前字符串设为最长字符串。
  4. 如果存在,则去除子字符串中当前字符及以前的字符,继续遍历。

实现代码:

  1. import java.util.HashSet;
  2. import java.util.Scanner;
  3. import java.util.Set;
  4. public class 无重复子串 {
  5. public static int lengthOfLongestSubstring(String s) {
  6. int a = s.length();
  7. Set<Character> str = new HashSet<>();
  8. int ans = 0 , i = 0 , j = 0 ;
  9. while(i < a && j < a){
  10. if(!str.contains(s.charAt(j))){
  11. str.add(s.charAt(j++));
  12. ans = Math.max(ans,j-i);
  13. }else{
  14. str.remove(s.charAt(i++));
  15. }
  16. }
  17. return ans;
  18. }
  19. public static void main(String[] args) {
  20. Scanner s = new Scanner(System.in);
  21. System.out.print("请输入子串: ");
  22. String str = s.nextLine();
  23. System.out.println("最长子串长度为:" + lengthOfLongestSubstring(str));
  24. }
  25. }

输出示例:

 

 

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

闽ICP备14008679号