您的位置:首页 > 其它

【Leetcode】Longest Substring Without Repeating Characters

2016-05-27 23:48 330 查看
题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/

题目:

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.

思路:

实质是求s内的相同字符之间的最大长度 将s将相同字符之间分割为一个个子串 比较长度,所以需要保存前面跟自己相同的字符的位置。

算法

public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0)
return 0;

int max = 1;
int idx = -1;// 当前子串的起始位置
// idx取-1 是因为当字符串本身就是最长子串时 idx不会被修改 而max需要为s的长度需要加1
Map<String, Integer> maps = new HashMap<String, Integer>();
char c[] = s.toCharArray();

for (int i = 0; i < c.length; i++) {
if (maps.containsKey(c[i] + "") && maps.get(c[i] + "") > idx) {
idx = maps.get(c[i] + "");
}
max = Math.max(max, i - idx);
maps.put(c[i] + "", i);
}
return max;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: