Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3.
For “bbbbb” the longest substring is “b”, with the length of 1.
解题思路–动态规划
此题可以利用动态规划的方法,分别求出字符串中以第i个字符结尾的没有重复字符的最长子串,如果第i+1个字符不存在于以第i个字符结尾的没有重复字符的最长子串中,则以第i+1个字符结尾的没有重复字符的最长子串等于第i个字符结尾的没有重复字符的最长子串加上第i+1个字符,如果第i+1个字符存在于以第i个字符结尾的没有重复字符的最长子串中,则以第i+1个字符结尾的没有重复字符的最长子串等于从第i+1个字符存在于第i个字符结尾的没有重复字符的最长子串中的后一个字符到第i+1个字符。
java代码
public static int lengthOfLongestSubstring2(String s) {
int[] res=new int[256];//保存字符上一次出现的位置
Arrays.fill(res, -1);
int max=0;
int index=0;//保留起始位置
for(int i=0;i<s.length();i++){
char a=s.charAt(i);
if(res[a]>=index){//如果当前字符出现过,那么当前子串的起始位置为这个字符上一次出现的位置+1
index=res[a]+1;
}
if(i-index+1>max){
max=i-index+1;
}
res[a]=i;
}
return max;
}