题号:3
原题:Longest Substring Without Repeating CharactersGiven 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. // 子字符串必需连续
Subscribe to see which companies asked this question.
设计:
举例:“abcdbef”,找到两个子序列,一个head表示一个子序列,第二个子序列更长些,max=max2=5。
一个超时的方法:
public int lengthOfLongestSubstring(String s) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
char[] cs = s.toCharArray();
int max = 0;
int order = 0;
int head = 0;
for(char i:cs) {
if( map.containsKey(i)) {
max = Math.max(order-head, max);
head = Math.max(map.get(i)+1, head);
}
map.put(i, order);
order++;
}
max = Math.max(order-head, max);
return max;
}
成功方法:
public class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
int max = 0;
int order = 0;
int head = 0;
for(int i = 0; i < s.length(); i++) {
if (map.containsKey(s.charAt(i))) { // 字符串单独转换
max = Math.max(order-head, max);
head = Math.max(map.get(s.charAt(i))+1, head);
}
map.put(s.charAt(i), order);
order++;
}
max = Math.max(order-head, max);
return max;
}
}