plduhoux
2/20/2018 - 1:51 AM

buildPalindrome

String buildPalindrome(String st) {
    int l = st.length();
    for (int i = l / 2; i < l; i++) {
        if (ismiddle(i, st))
            return st + (2 * i - l > 0 ? new StringBuilder(st.substring(0, 2 * i - l)).reverse().toString() : "");
        
        if (ispivot(i, st))
            return st + new StringBuilder(st.substring(0, 2 * i - l + 1)).reverse().toString();
        
    }
    return null;
}

boolean ispivot(int pos, String s) {
    int i = 1;
    while (pos + i < s.length()) {
        if (s.charAt(pos + i) != s.charAt(pos - i)) return false;
        i++;
    }
    return true;
}

boolean ismiddle(int pos, String s) {
    int i = 0;
    while (pos + i < s.length()) {
        if (s.charAt(pos + i) != s.charAt(pos - i - 1)) return false;
        i++;
    }
    return true;
}