BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #42845同步于 2015/7/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

JAVA最大无重复字符串的数目

li2009211120
2015/7/15镜像同步6 回复
版本1: public static int longestNodupSubstring(String s) { int len = s.length(); int num = 0; if(len > 0){ Map<Character,Integer> cursor = new HashMap<Character,Integer>(); cursor.put(s.charAt(0),0); int[] lengthAt = new int[s.length()]; lengthAt[0]=1; int max = 0 ; for(int i = 1 ; i < len;i++){ char c =s.charAt(i); if(cursor.containsKey(c)){ lengthAt[i] = Math.min(lengthAt[i-1]+1, i-cursor.get(c)); }else { lengthAt[i] = lengthAt[i-1]+1; } max = Math.max(max, lengthAt[i]); num = Math.max(max, num); cursor.put(c, i); } } return num; } 版本2 public static int lengthOfLongestSubstring(String s){ int length=s.length(); char[] data = s.toCharArray(); int[] next=new int[length]; for(int i=0; i<length; i++){ int right = s.indexOf(data[i], i+1); if(right==-1) right = length; //右侧找不到相应字符则 next[i] = right; } int[] first = next; for(int j=0 ;j<length;j++) { for(int k=j;k<length;k++) { if(first[j]>next[k]) first[j]=next[k]; } } int max = 1; for(int m=0; m<length; m++) { if((first[m]-m)>max) max=first[m]-m; } return max; } 2个版本的算法leetcode都通不过,时间复杂度太高,求1个简单的+批评~
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
dss886机器人#1 · 2015/7/15
HashMap是肯定不行的吧……
lovena机器人#2 · 2015/7/15
你这个是第三题吗? 找不到对应的题号啊
icyfox机器人#3 · 2015/7/15
其实建议你直接看discussion,里面有人贴出完整的解法...
li2009211120机器人#4 · 2015/7/16
【 在 icyfox 的大作中提到: 】 : 其实建议你直接看discussion,里面有人贴出完整的解法... 恩,其实刚上去,发完贴后面就发现有discussion了,可是不会删帖~-~
smalldr机器人#5 · 2015/7/16
看tags有提示~
aiquestion机器人#6 · 2015/7/16
看了下discussion好像并不是hashmap不行,而是java的hashmap因为泛型擦除要搞object的类型转换之类的,和一起其他操作。 用c#的Dictionary就可以。。囧 【 在 dss886 的大作中提到: 】 : HashMap是肯定不行的吧……