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