LeetCode-Longest Substring Without Repeating Characters
阿新 • • 發佈:2018-04-11
JD integer wke bstr import urn i+1 mage note
Given a string, find the length of the longest substring without repeating characters.
Example:
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 com.leetcode.study; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class Main { public static void main(String[] args) { System.out.println(lengthOfLongestSubstring("wllxdiklosdrdxfohgwringzefwbytmwgxtjhdxwycpbawphcnbmajmeokhoftlmsexakuyixplxmagoojdospvjbcxh")); }public static int lengthOfLongestSubstring(String s){ Map<String,Integer> map = new HashMap<String, Integer>(); for(int i = 0;i<s.length();i++){ if(map.containsKey(s.charAt(i)+"")){ continue; }else{ map.put(s.charAt(i)+"", i); } } Set<String> set; int length = 0; boolean flag = false; for(int i = map.size();i>0;i--){ for (int j = 0; j < s.length()-i+1; j++) { String temp = s.substring(j, j+i); set = new HashSet<String>(); for(int k=0;k<temp.length();k++){ set.add(temp.charAt(k)+""); } if(set.size()==temp.length()){ length=set.size(); flag=true; break; } } if(flag){ break; } } return length; } }
代碼運行超時。
還是看看別人的代碼吧。
滑動窗口算法:
package com.leetcode.study; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class Main { public static void main(String[] args) { System.out.println(lengthOfLongestSubstring("abcabcbb")); } public static int lengthOfLongestSubstring(String s){ int n = s.length(); Set<Character> set = new HashSet<Character>(); int ans=0,i=0,j=0; while(i<n&&j<n){ if(!set.contains(s.charAt(j))){ set.add(s.charAt(j)); j++; ans=Math.max(ans, j-i); }else{ set.remove(s.charAt(i)); i++; } } return ans; } }
這個方法沒太弄明白。
LeetCode-Longest Substring Without Repeating Characters