题目:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
算法思想:
本题采用滑动窗口的方法是最简单的,其中start记录的是当前最长子串的起始位置,max记录着当前最长子串,hash是一个哈希表,如果当前指向的字符不存在hash表中,我们就将它加入到当前hash中,若判断,当前指向的字符已经在hash中存在,我们则将start更新成上一个存在字符的位置,后续在判断max和i-start的大小。
代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character, Integer> hash = new HashMap<Character, Integer>();
int start = -1;
int max = 0;
for(int i = 0; i < s.length(); i++) {
char x = s.charAt(i);
if(hash.containsKey(x)) {
start = Math.max(start, hash.get(x));
}
hash.put(x, i);
max = Math.max(max, i-start);
}
return max;
}
}