最长无重复字符的子串
给定一个字符串,请找出其中无重复字符的最长子字符串。
例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。
对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。
从长度为1的最长子串开始,长度为2的子串必然为某个长度为1的子串+1。
得到方程 对于字符串数组a[]的元素i,用数组dp[]记录以i为开头的长度为n的子串是否为一个无重复子串,每次只需要检查新加入的元素是否重复.
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
public class Solution {
public int lengthOfLongestSubstring(String s) {
// write your code here
if(s.equals("")){
return 0;
}
char a[]=s.toCharArray();
boolean dp[]=new boolean [a.length];
for(int j=0;j<dp.length;j++){
dp[j]=true;
}
int length=1;
for(int i=1;i<a.length;i++){
boolean bool=false;
for(int j=0;j<a.length-i;j++){
if(dp[j+1]&&in(a,j,j+i)){
dp[j]=true;
bool=true;
}else{
dp[j]=false;
}
}
if(bool==false){
length=i;
break;
}
if((bool==true&&i==a.length-1)){
length=i+1;
}
}
return length;
}
public boolean in(char [] a,int start,int end){
for(int i=start+1;i<=end;i++){
if(a[start]==a[i]){
return false;
}
}
return true;
}
}