请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
解题思路:使用哈希表+数组。首先将s转换成数组,然后进行遍历。哈希表存放s[i]的每一个字符及i值,声明一个左边界leftIndex(初值为-1)和result。对数组遍历,当哈希表中含有s[i]所对应的字符时,就更新左边界。如果不含有,接着遍历。每次将s[i]和i值存放在哈希表中,最后result取i-leftIndex的最大值就是最大字串的长度。用java写的,具体实现如下:
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s==null ||s.length()<=0){
return 0;
}
int leftIndex=-1;
int result=0;
Map<Character,Integer> leftMap=new HashMap<Character,Integer>();
char[] charArray=s.toCharArray();
for(int i=0;i<s.length();i++){
if(leftMap.containsKey(charArray[i])){
leftIndex=Math.max(leftIndex,leftMap.get(charArray[i]));//如果当前字符在之前出现过,则左边界右移到重复字符位置,这样每次出现重复字符的时候,移动到重复字符的i。最后计算result的时候,计算result和i-leftIndex的最大值,得到的就是最大不重复字符的长度。
}
leftMap.put(charArray[i],i);
result=Math.max(result,i-leftIndex);
}
return result;
}
}
时间复杂度: