给定一个字符串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); } }
最终结果:
时间: 2024-10-12 09:19:17