Friday, February 9, 2018

[java][Exerise] CodingBat sameEnds answer

Question

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"

Expected result


Solution

public String sameEnds(String string) {
  String[] subStrs = getAllSubstring(string);
  String result = "";
  for(int i = subStrs.length-1; 0<=i; i--){
      String lastPart = string.substring(string.length()-i-1,string.length());
      if(subStrs[i].equals(lastPart)) return lastPart;
  }
  return result;
}

private String[] getAllSubstring(String source){
    int scope = (int) Math.floor(source.length()/2);
    String[] substringList = new String[scope];
    for(int i=0; i<scope; i++){
        String c = Character.toString(source.charAt(i));
        if(i!=0){
            substringList[i] = substringList[i-1]+c;
        }else{
            substringList[i] = c;
        }
    }
    return substringList;
}

Reference

http://codingbat.com/prob/p131516

No comments :

Post a Comment