03.Longest Substring Without Repeating Characters
Posted mrjoker-lzh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03.Longest Substring Without Repeating Characters相关的知识,希望对你有一定的参考价值。
Longest Substring Without Repeating Characters(最长的子串不重复字符)
题目要求:给定一个字符串,找到最长的子字符串的长度,要求不重复字符。
例如:
给定一个字符串“abcabcbb”,答案是“abc”,长度是3。
给定一个字符串“bbbbb”,答案是“b”,长度是1。
给定一个字符串“pwwkew”,答案是“wke”,长度是3。
注意:答案必须是一个子字符串,“pwke”是一个子序列,而不是一个子字符串。
解法一:
思路:基本思想为建立一个散列表来存储字符串中的字符。以字符为键,字符所处位置为值。设置两个值start,end来扫描字符串,同时更新散列表。如果该字符已经存在于散列表中,则更新start值,将start值赋值为最后找到的同一个字符的右侧。
1 public class LongestSubstringWithoutRepeatingCharacters { 2 3 public static void main(String[] args) { 4 Scanner scanner = new Scanner(System.in); 5 String string = scanner.nextLine(); 6 System.out.println("最长不重复子串的长度为:" + lengthOfLogestSubstring(string)); 7 } 8 9 10 public static int lengthOfLogestSubstring(String s) { 11 int max = 0; 12 Map<Character, Integer> map = new HashMap<>(); 13 for (int start = 0,end = 0; end < s.length(); end++) { 14 if (map.containsKey(s.charAt(end))) { 15 start = Math.max(start, map.get(s.charAt(end))+1); 16 } 17 map.put(s.charAt(end), end); 18 max = Math.max(max, end-start+1); 19 } 20 return max; 21 } 22 }
以上是关于03.Longest Substring Without Repeating Characters的主要内容,如果未能解决你的问题,请参考以下文章
ICS计算系统概论实验3—LC3汇编代码实现最长重复子字符串Longest-duplicate-substring
leetcode@ [30/76] Substring with Concatenation of All Words & Minimum Window Substring (Hashtab
Swift 4:不推荐使用 substring(with:)':请使用字符串切片下标 [重复]
leetcode 30 Substring with Concatenation of All Words
LeetCode Longest Substring with At Most Two Distinct Characters