By
木子雷
阅读数: 次
前言:
使用滑动窗口算法查找字符串中不包含重复字符的最长子串。
代码奉上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import java.util.HashMap; import java.util.HashSet; import java.util.Set; public class Test1 { public static void main(String[] args) { String str = "asdfgrsefkkclgtdxdwee"; StringBuilder sb = new StringBuilder(); HashMap<Integer, String> map = new HashMap<>(); int n = str.length(); Set<Character> set = new HashSet<>(); int max = 0, i = 0, j = 0; while (i < n && j < n) { if (!set.contains(str.charAt(j))) { char ss = str.charAt(j++); set.add(ss); sb.append(ss); max = max > j - i ? max : j - i; if (j == n) { map.put(sb.length(), sb.toString()); } } else { map.put(sb.length(), sb.toString()); set.remove(str.charAt(i++)); sb.delete(0, 1); } } System.out.println("最大子串的长度:" + max); System.out.println("最大子串:" + map.get(max)); } }
|