您的位置:首页 > 其它

LeetCode 003 Longest Substring Without Repeating Characters O(n)做法

2018-02-16 14:27 399 查看
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 subsequenceand not a substring.
用HashMap加快查询速度。HashMap.containsKey复杂度O(1),HashMap.containsValue复杂度O(n)。class Solution {
public int lengthOfLongestSubstring(String s) {
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))) {
// 这里取max是因为map中的元素加入之后一直存在
// map.get能获得最后一次出现的位置
j = Math.max(j, map.get(s.charAt(i)) + 1);
}
map.put(s.charAt(i), i);
max = Math.max(max, i - j + 1);
}
return max;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: