问题
(问题都是来源某牛的题,用matlab编程实现)
小易得到了一个仅包含大小写英文字符的字符串,该字符串可能不是回文串。(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串,“asds”就不是回文串。)
小易可以在字符串尾部加入任意数量的任意字符,使其字符串变成回文串。
现在请你编写一个程序,程序要能计算出小易可以得到的最短回文串。
输入例子
noo
输出例子
noon
输入例子2
helloworld
输出例子2
helloworldlrowolleh
解题思路
回文字符串处理问题,可以想到对称轴法,遍历一半字符串,以当前字符为对称轴向两边扩展直到遇到字符串结尾,剩下的部分贴在末尾。。。。
Matlab代码实现
matlab代码稍后补上....
python代码实现
def isPalindrome(t): #判断t是否为回文
flag=1
j=len(t)-1
for i in range(int(len(t)/2)):
if t[i]!=t[j]:
flag=0
return flag
j=j-1
return flag
s=input().strip()
if isPalindrome(s):
print(s)
else:
t=s
for i in range(int(len(s)/2),len(s)): #对称轴法
j=i
k=i+1
flag=0
while j>=0 and k<len(s) and s[j]==s[k]:
j=j-1
k=k+1
if k==len(s):
flag=1
if k==len(s) and flag==0:
k=k-2
while k>=0:
s=s+s[k]
k=k-1
break
while flag==1 and j>=0 :
s=s+s[j]
j=j-1
if flag==1:
break
print(s)
总结
看到回文字符串要想到对称轴…