题目描述:
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. Find and return the shortest palindrome you can find by performing this transformation.
For example:
Given "aacecaaa", return "aaacecaaa".
Given "abcd", return "dcbabcd".
给定字符串s,如果不是回文,添加最短前缀,使得s成为回文。
思路:
两个索引两边扫i,j:
扫描长度为len=s.Length-1. i=0,j=len
如果不相等,i++,j--
如果相等,len-1。i与j分别重置为i和len
最后将[len+1,s.Length]之间的长度截取,旋转作为前缀。
实现代码:
public class Solution {
public string ShortestPalindrome(string s)
{
if(string.IsNullOrEmpty(s)){
return s;
}
int i = 0;
int leftLen = s.Length - 1;
int j = leftLen;
while (i < j) {
if (s[i] == s[j]) {
i++;
j--;
} else {
i = 0;
leftLen--;
j = leftLen;
}
}
var charArr = s.Substring(leftLen+1, s.Length-1-leftLen).ToArray();
Array.Reverse(charArr);
return new string(charArr) + s;
}
}