题目地址:
https://www.lintcode.com/problem/678/description
给定一个字符串 s s s,问向其前面添加至少多少个字符可以使其变为回文串,返回得到的回文串。
其实就是求 s s s的最长回文前缀。代码如下:
public class Solution {
/**
* @param str: String
* @return: String
*/
public String shortestPalindrome(String str) {
// Write your code here
for (int i = str.length() - 1; i >= 0; i--) {
if (check(str, i)) {
String suf = str.substring(i + 1);
return new StringBuilder(suf).reverse().append(str).toString();
}
}
return "";
}
private boolean check(String s, int j) {
for (int i = 0; i < j; i++, j--) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
}
return true;
}
}
时间复杂度 O ( l s ) O(l_s) O(ls),空间 O ( 1 ) O(1) O(1)。