最长无重复字符的子串

来源:互联网 发布:信息是数据的什么 编辑:程序博客网 时间:2024/05/21 09:25

最长无重复字符的子串

给定一个字符串,请找出其中无重复字符的最长子字符串。
例如,在”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;    }}
0 0
原创粉丝点击