[leetcode]3. Longest Substring Without Repeating Characters(Java)

来源:互联网 发布:lamp兄弟连mysql 编辑:程序博客网 时间:2024/05/26 20:23

https://leetcode.com/problems/longest-substring-without-repeating-characters/#/description


Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring"pwke" is a subsequence and not a substring.



package go.jacob.day705;import java.util.HashMap;import java.util.HashSet;import java.util.Set;/** * [leetcode]3. Longest Substring Without Repeating Characters *  * @author Jacob * */public class Demo1 {/* * the basic idea is, keep a hashmap which stores the characters in string as keys  * and their positions as values, and keep two pointers which define the max substring. * move the right pointer to scan through the string , and meanwhile update the hashmap. * If the character is already in the hashmap,  * then move the left pointer to the right of the same character last found.  * Note that the two pointers can only move forward. */public int lengthOfLongestSubstring(String s) {if (s == null || s.length() < 1)return 0;HashMap<Character, Integer> map = new HashMap<Character, Integer>();int max = 0;for (int i = 0,j=0; i < s.length(); i++) {if(map.containsKey(s.charAt(i))){j=Math.max(j, map.get(s.charAt(i)+1));}map.put(s.charAt(i), i);max=Math.max(max, i+1-j);}return max;}/* * Solution by me Runtime: 51 ms.Your runtime beats 80.99 % of java * submissions. 思路:确定两个指针p1和p2,再new一个HashSet用来存储subString中的字符 * 循环:p2加1,如果HashSet不含有该字符,subString长度加1;如果含有该字符,把p1指向的字符删除,p1+1 */public int lengthOfLongestSubstring_1(String s) {if (s == null || s.length() < 1)return 0;char[] arr = s.toCharArray();Set<Character> set = new HashSet<Character>();set.add(arr[0]);int p1 = 0, p2 = 1;int tempNum = 1, res = 1;while (p2 < s.length()) {while (set.contains(arr[p2])) {set.remove(arr[p1++]);tempNum--;}set.add(arr[p2++]);tempNum++;if (tempNum > res)res = tempNum;}return res;}}


阅读全文
0 0
原创粉丝点击