public class Solution {
public static int lengthOfLongestSubstring(String s) {
int count=0;
int start=0;
int max=0;
Map<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))!=true){
count++;
map.put(s.charAt(i),i);
}
else{
if(max<count) max=count;
if(start<map.get(s.charAt(i))) start=map.get(s.charAt(i));
count=i-start;
map.put(s.charAt(i), i);
}
}
if(max<count) max=count;
return max;
}
}思路:O(n)解法,遍历字符串,逐个添加,用HashMap检查是否有重复字符,更新长度和统计的起始坐标。
下面这个写法代码更简洁一点。
public class Solution {
public static int lengthOfLongestSubstring(String s) {
int start=0;
int max=0;
Map<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))==true){
if(start<=map.get(s.charAt(i)))
start=map.get(s.charAt(i))+1;//update start index
}
map.put(s.charAt(i), i);
if(max<(i-start+1)) max=i-start+1;//update max
}
return max;
}
}Longest Substring Without Repeating Characters,布布扣,bubuko.com
Longest Substring Without Repeating Characters
原文地址:http://blog.csdn.net/dutsoft/article/details/38237205