1. 程式人生 > >字符串問題之 找到字符串的最長無重復子串

字符串問題之 找到字符串的最長無重復子串

給定 ack col 大小 ges logs pub 學會 main

給定一個字符串str, 返回str的最長無重復字符子串長度

例如 str="abcd‘ 返回4

str=“aabcb” 最長“abc” 返回3

解決本題的思路非常非常有趣,這種思路必須要學會:

本題目可以做到 時間復雜度O(N) str長度N 空間復雜度O(M) M是字符編碼

根據字符編碼 大小 申請 map key表示字符 value表示最近出現的位置

int pre 遍歷到的字符str[i] 以為str[i]結尾的最長無重復字符子串開始位置的前一個位置 初始時候 pre=-1;

int len 記錄以每一個字符結尾的情況下 最長的長度 初始len=0

package TT;



public class Test6 {
  
    public static int maxUnique(String str){
        if(str==null || str.equals("")){
            return 0;
        }
        
        char[] chas = str.toCharArray();
        int[] map = new int[256];
        for(int i =0; i<256; i++){
            map[i]=-1;
        }
        
        
int len =0; int pre = -1; int cur=0; for(int i =0; i!=chas.length; i++){ pre = Math.max(pre, map[chas[i]]); cur = i-pre; len = Math.max(len, cur); map[chas[i]]=i; }
return len; } public static void main(String[] args){ String aa = "abcd"; int x = maxUnique(aa); System.out.println(x); } }

最終結果:

技術分享

字符串問題之 找到字符串的最長無重復子串