Matlab编程练习3(字符串2)

问题

(问题都是来源某牛的题,用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)

总结

   看到回文字符串要想到对称轴…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值