首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java找到最长的非重复子字符串-得到奇怪的结果

java找到最长的非重复子字符串-得到奇怪的结果
EN

Stack Overflow用户
提问于 2019-10-07 15:30:39
回答 5查看 148关注 0票数 5

我正在做一个经典的leet代码问题:在字符串中找到最长的非重复子字符串。尽管在堆栈溢出上有很多类似的问题。我抓了几个小时的头,不知道为什么我的代码会产生这个奇怪的结果。希望有人能告诉我为什么我的

我是用Java做的

代码语言:javascript
运行
复制
    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));           
    }

对于输入字符串

代码语言:javascript
运行
复制
"wwhoamiUrektxineabcdefghijklmno"

输出为

代码语言:javascript
运行
复制
"abcdefghijklmnb" 

但这是错的,最后一个字母应该是"o“

EN

Stack Overflow用户

发布于 2019-10-07 16:49:53

当您在最后一个周期任务中时,问题出在嵌套的for中。如果if不匹配,您不会将str添加到列表中,也不会重新发送str变量。为了解决这个问题,我稍微修改了一下你的源代码:

代码语言:javascript
运行
复制
 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));      
}
票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58265179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档