不使用双指针java是实现给定一个字符串,通过在字符串前面添加字符将其转换为回文串,找到并返回可以用这种方式转换的最短 回文串。回文串就是正序和倒序完全相同的字符串
时间: 2024-05-14 16:12:17 浏览: 61
回文字符串:判断一个是否是回文字符串。回文字符串是指正序(从左向右)和倒序(从右向左)读都是一样的字符串。
5星 · 资源好评率100%
思路:先判断原字符串是否已经是回文串,如果是,则直接返回原字符串;否则,在原字符串前面添加最少的字符,使得添加后的字符串是回文串。
具体实现如下:
```java
public String shortestPalindrome(String s) {
int n = s.length();
int i = 0;
for (int j = n - 1; j >= 0; j--) {
if (s.charAt(i) == s.charAt(j)) {
i++;
}
}
if (i == n) { // 原字符串已经是回文串
return s;
}
String suffix = s.substring(i); // 截取后缀
String prefix = new StringBuilder(suffix).reverse().toString(); // 将后缀翻转作为前缀
String mid = shortestPalindrome(s.substring(0, i)); // 递归处理前缀
return prefix + mid + suffix;
}
```
时间复杂度:$O(n^2)$,其中 $n$ 是字符串长度。在最坏情况下,需要递归 $n$ 层,每层需要 $O(n)$ 的时间复杂度。空间复杂度:$O(n)$,递归栈的深度为 $O(n)$。
阅读全文