java 实现 一个字符串中不重复最长子串

publicstaticvoidlongestNodupSubstring(Stringstring){intlen=string.length();if(len>0){... public static void longestNodupSubstring(String string) {
int len = string.length();
if(len > 0){
Map<Character,Integer> cursor = new HashMap<Character,Integer>();
cursor.put(string.charAt(0),0);
int[] lengthAt = new int[string.length()];
lengthAt[0]=1;
int max = 0 ;
for(int i = 1 ; i < len;i++){
char c =string.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]);
cursor.put(c, i);
}
for(int i=0;i<len;i++){
if(max == lengthAt[i]){
System.out.println(string.substring(i-max+1, i+1));
}
}
}
}

}
不太理解lengthAt[i]和max的取值,能仔细讲讲这个程序的执行过程
展开
 我来答
攒眉柳妆成0
2014-06-23 · TA获得超过187个赞
知道小有建树答主
回答量:204
采纳率:100%
帮助的人:169万
展开全部
这个函数的目的是求最长不重复子串,所谓不重复子串是指由某个字符串中相邻的N个字符组成,这个N内所有字符都是不重复的,最长是指这个N最大。如字符串"abcdefghiud",最长的不重复的子串为"abcdefghiu"
cursor里面存放字符的在字符串中的位置
lengAt[i]存放以字符string.charAt(i)结尾的最长子字符串的长度
max的目的就是确定这个最长,因为最开始可能找到的子串比以后找到的子串短,所以用max比较
198901245631
2015-11-06 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1751万
展开全部
实现思路就是先拿第一个字符和第二个字符比较,不一样的话,取到这两个字符,之后和第三个比较,直到出现重复的保存下来(多次循环,取出最长的一个)。
public static void longestNodupSubstring(String string) {
int len = string.length();
if(len > 0){
Map<Character,Integer> cursor = new HashMap<Character,Integer>();
cursor.put(string.charAt(0),0);
int[] lengthAt = new int[string.length()];
lengthAt[0]=1;
int max = 0 ;
for(int i = 1 ; i < len;i++){
char c =string.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]);
cursor.put(c, i);
}
for(int i=0;i<len;i++){
if(max == lengthAt[i]){
System.out.println(string.substring(i-max+1, i+1));
}
}
}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式