版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Findyoulucky/article/details/88599322
最短回文串问题
回文串——指的是正读和反读都一样的字符串,简单理解就是轴对称。
题目背景:
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
例如:
输入: “aacecaaa”
输出: “aaacecaaa”
解决思路是:
step1:判断该字符串是是否是回文字符串,如果不是,跳转到step2;
step2:找出从字符串第一个字符开始的最长回文字符串,找到以后执行step3;
step3:将无法构成回文串部分的子串倒叙拼接;
判断是否是回文字符串的方法:
从中间往两端或者是从两端往中间一个一个字母比较。
代码如下:
class Solution {
public String shortestPalindrome(String s) {
if(isPalindrome(s)){
return s;
}
int end=0;
for(int i=2;i<s.length();i++){
if(isPalindrome(s.substring(0,i))){
end=i-1;
}
}
StringBuilder sb=new StringBuilder();
for(int i=s.length()-1;i>end;i--){
sb.append(s.charAt(i));
}
sb.append(s);
return sb.toString();
}
private boolean isPalindrome(String s){
int mid=s.length()/2;
int l,r;
if(s.length()%2==0){
l=mid-1;
r=mid;
}
else{
l=mid-1;
r=mid+1;
}
while(l>=0&&r<s.length()){
if(s.charAt(l--)!=s.charAt(r++))
return false;
}
return true;
}
}