码迷,mamicode.com
首页 > 其他好文 > 详细

03.Longest Substring Without Repeating Characters

时间:2018-10-10 22:02:26      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:star   ext   style   ++   nbsp   long   ann   cab   public   

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

标签:star   ext   style   ++   nbsp   long   ann   cab   public   

原文地址:https://www.cnblogs.com/mrjoker-lzh/p/9768584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!