Codingbat 挑战:sameEnds

Evg*_*niy 3 java string substring matching

给定来自 CodingBat 的SameEnds任务:

\n

给定一个字符串,返回出现在字符串开头和结尾且不重叠的最长子字符串。例如,sameEnds(“abXab”) 是“ab”。

\n
sameEnds("abXYab") \xe2\x86\x92 "ab"\nsameEnds("xx") \xe2\x86\x92 "x"\nsameEnds("xxx") \xe2\x86\x92 "x"\n
Run Code Online (Sandbox Code Playgroud)\n

我的解决方案通过了除一个之外的所有测试^:

\n
public String sameEnds(String string) {\n  String substringFront = "";\n  String substringEnd = "";\n  String longestSubstring = "";\n  \n  for (int i = 1; i < string.length() - 1; i++) {\n    substringFront = string.substring(0, i);\n    substringEnd = string.substring(i);\n    \n    if (substringEnd.contains(substringFront)) {\n      longestSubstring = substringFront;\n    }\n  }\n  \n  return longestSubstring;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这里有什么问题?我该如何解决它?

\n

在此输入图像描述

\n

And*_*ris 5

除了@Dan 和其他人恰当指出的技术问题之外,我想强调不必要的复杂性问题,这在许多情况下会导致此类逻辑错误。

鉴于此,并考虑到这是一个挑战,我更喜欢一种简约的方法,如下所示,它是不言自明的,因此易于理解和调试。

public String sameEnds(String string) {
  int middle = string.length() / 2;
  for (int i = middle; i >= 0; i--) {
    String left = string.substring(0, i);
    if (string.endsWith(left)) {
      return left;
    }
  }
  return "";
}
Run Code Online (Sandbox Code Playgroud)