【问题标题】:Longest Substring Without Repeating Characters - Java没有重复字符的最长子串 - Java
【发布时间】:2018-03-26 09:53:42
【问题描述】:

现在我知道这个问题已经有了正确答案,但我只是想找出为什么我自己的代码不起作用。

问题:给定一个字符串,找出最长不重复字符的子串的长度。给定“abcabcbb”,答案是“abc”,长度为3。我的代码输出时间太长,输出1。

我的代码:

public class problemOne {

    static int lengthOfLongestSubstring(String s) {
        int count, longest = 1;

        for (int x = 0; x < s.length(); x++) {
            count = 1;
            for (int y = x + 1; y < s.length(); y++) {
                if (x != y) {
                    count++;
                } else {
                    longest = Math.max(longest, count);
                    break;
                }
            }
        }
        return longest;

    }

    public static void main(String[] args) {
        String str = "abcabcbb";
        System.out.println(lengthOfLongestSubstring(str));
    }
}

谢谢!

【问题讨论】:

  • 提示:在您的循环中,您现在实际上是在查看 characters。你只使用s 来找出它的长度。鉴于您以 y = x + 1 开头并增加 y,您预计 if (x != y) 何时为假?
  • 下一个提示:现在是学习调试的好时机。你有一个相对简单的程序,所以如果你对它进行调试,你应该能够看到它在哪里表现得不像你期望的那样。
  • @JonSkeet 我一直试图找出问题所在,但看不到它,谢谢,我现在用 .charAt() 修复了它。现在,我实际上发现我的代码是一团糟,即使修复它也无法正常工作。

标签: java string substring


【解决方案1】:

在内循环中,有:if (x != y)。我猜你的意思是在这里比较字符,而不是数字。

然后:内部循环如何“知道”之前处理过哪些字符?也许内部循环用于将当前字符与已处理的字符进行比较?而是你比较数字。

【讨论】:

  • 你错过了问题的重点。 OP 不想要不同的解决方案 - 他们想知道他们当前的代码出了什么问题。
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 2019-09-11
  • 2022-08-14
相关资源
最近更新 更多