我正在做一个经典的leet代码问题:在字符串中找到最长的非重复子字符串。尽管在堆栈溢出上有很多类似的问题。我抓了几个小时的头,不知道为什么我的代码会产生这个奇怪的结果。希望有人能告诉我为什么我的
我是用Java做的
public static void main( String[] args )
{
String s= "wwhoamiUrektxineabcdefghijklmno";
longestNonRepeatStr(s);
}
public static void longestNonRepeatStr(String tstring) {
String str="";
String compare="";
List<String> list= new ArrayList<String>();
int biggest =0;
//find the nonrepeating string in each loop and add to list str
for (int i=0; i<tstring.length(); i++) {
for (int j=i; j<tstring.length()-1; j++) {
str+= tstring.charAt(j);
compare= Character.toString(tstring.charAt(j+1));
if (str.contains(compare)){
list.add(str);
str="";
break;
}
}
}
//find the longest nonrepeating string in the list
for (int i=0; i<list.size(); i++) {
if (list.get(biggest).length()< list.get(i).length()) {
biggest=i;
}
}
System.out.println(list);
System.out.println(list.get(biggest));
}对于输入字符串
"wwhoamiUrektxineabcdefghijklmno"输出为
"abcdefghijklmnb" 但这是错的,最后一个字母应该是"o“
发布于 2019-10-07 16:49:53
当您在最后一个周期任务中时,问题出在嵌套的for中。如果if不匹配,您不会将str添加到列表中,也不会重新发送str变量。为了解决这个问题,我稍微修改了一下你的源代码:
public static void longestNonRepeatStr(String tstring) {
String str="";
String compare="";
List<String> list= new ArrayList<String>();
int biggest =0;
//find the nonrepeating string in each loop and add to list str
for (int i=0; i<tstring.length()-1; i++) {
for (int j=i+1; j<tstring.length(); j++) {
str+= tstring.charAt(j-1);
compare= Character.toString(tstring.charAt(j));
if (str.contains(compare)){
list.add(str);
str="";
break;
}else{
if (j==tstring.length()-1){
str+= tstring.charAt(j);
list.add(str);
str="";
}
}
}
}
//find the longest nonrepeating string in the list
for (int i=0; i<list.size(); i++) {
if (list.get(biggest).length()< list.get(i).length()) {
biggest=i;
}
}
//System.out.println(list);
System.out.println(list.get(biggest));
}https://stackoverflow.com/questions/58265179
复制相似问题