返回信息流版本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个简单的+批评~
这是一条镜像帖。来源:北邮人论坛 / java / #42845同步于 2015/7/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
JAVA最大无重复字符串的数目
li2009211120
2015/7/15镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
【 在 icyfox 的大作中提到: 】
: 其实建议你直接看discussion,里面有人贴出完整的解法...
恩,其实刚上去,发完贴后面就发现有discussion了,可是不会删帖~-~
看了下discussion好像并不是hashmap不行,而是java的hashmap因为泛型擦除要搞object的类型转换之类的,和一起其他操作。
用c#的Dictionary就可以。。囧
【 在 dss886 的大作中提到: 】
: HashMap是肯定不行的吧……