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.
思路:对于没个i,我们向前探索一直到s.charAt(i)==s.charAt(j),i-j就是dp[i]的值,此时j最小循环到的值是j
代码如下(已通过leetcode)
public class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length()==0) return 0;
if(s.length()==1) return 1;
int dp[]=new int[s.length()];
int i,j;
int maxlen=0;
boolean flag=false;
dp[0]=1;
int start=0;
for(i=1;i<s.length();i++) {
for(j=i-1;j>=start;j--) {
if(s.charAt(i)==s.charAt(j)) {
flag=true;
start=j;
dp[i]=i-j;
break;
}
}
if(!flag) {
dp[i]=dp[i-1]+1;
}
if(dp[i]>maxlen) {
maxlen=dp[i];
}
flag=false;
}
return maxlen;
}
}