Search code examples
javastringsubstringmatching

Codingbat challenge: sameEnds


Given task sameEnds from CodingBat:

Given a string, return the longest substring that appears at both the beginning and end of the string without overlapping. For example, sameEnds("abXab") is "ab".

sameEnds("abXYab") → "ab"
sameEnds("xx") → "x"
sameEnds("xxx") → "x"

My solution passes all the tests except one^:

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

What is the problem here? How could I fix it?

enter image description here


Solution

  • This solution passes all tests:

    public String sameEnds(String string) {
      String substringFront = "";
      String substringEnd = "";
      String longestSubstring = "";
      
      for (int i = 1; i < string.length(); i++) {
        substringFront = string.substring(0, i);
        substringEnd = string.substring(i);
        
        if (substringEnd.contains(substringFront)) {
          longestSubstring = substringFront;
        }
      }
      
      return longestSubstring;
    }