leetcode, 3#,这题我的算法虽然 AC,但是总觉得有 bug?

2018-02-27 17:31:38 +08:00
 nutting

https://leetcode.com/problems/longest-substring-without-repeating-characters/description/

Given a string, find the length of the longest substring without repeating characters.

    public int lengthOfLongestSubstring(String s) {
        int longest=Integer.MIN_VALUE;
        for(int i=0;i<s.length();i++){
            int k=i;
            while(++k<=s.length()){
                String sub=s.substring(i,k);
                longest=sub.length()>longest?sub.length():longest;
                // 子串到结尾或者子串后面的那个字符包含在子串里,结束循环
                if(k==s.length()||sub.contains(s.substring(k,k+1) )){
                    break;
                }
            }
        }
        return longest==Integer.MIN_VALUE?s.length():longest;
    }
2457 次点击
所在节点    算法
1 条回复
snowonion
2018-03-24 12:20:11 +08:00
尝试证明正确性:
当执行到 `String sub=s.substring(i,k);` 时,`s.substring(i,k)` 总是无重复字符的,那么只要 `s.substring(i,k)` 不含有 `s.charAt(k)`,`s.substring(i,k+1)` 就是无重复字符的。

楼主可以再试试证贪心算法做这题的正确性。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/433216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX