题目:
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring
解题分析:
动态规划解题,分别计算前n个字符中以最后一个字符结尾的最长不重复子串,最后计算一下其中的最大值,时间复杂度为O(n*n+n)=O(n^2)。
代码:
public int lengthOfLongestSubstring(String s) {
if(s.length() == 0){
return 0;
}
int[] A = new int[s.length()];
A[0] = 1;
int max = 1;
for(int i = 1; i< s.length(); i++){
if(s.charAt(i) == s.charAt(i-1)){
A[i] = 1;
}else{
int j = 1;
for(; j < A[i-1]+1; j++){
if(s.charAt(i) == s.charAt(i-j)){
break;
}
}
A[i] = j;
}
if(max < A[i]){
max = A[i];
}
}
return max;
}