字符串問題之 找到字符串的最長無重復子串
阿新 • • 發佈:2017-08-22
給定 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); } }
最終結果:
字符串問題之 找到字符串的最長無重復子串