字符串:判断回文串、将字符串中的0移到最后、消除字符对

目录

一.判断回文串

1.1最长回文子串

1.2判断回文子串

二.将字符串中的0移到最后

三.字符串中相同字符删除(消除字符对)


一.判断回文串

1.1最长回文子串

def help(i,j,s):
    while(i<j):
        if(s[i]!=s[j]):
            return False
        i+=1
        j-=1
    return True
while(True):
    s=input()
    length=len(s)
    if (length<2):
        print(s[0])
    result=[]
    for i in range(length):
        j=length-1
        while(i<=j):
            if(help(i,j,s)):
                result.append(s[i:j+1])
                break
            j-=1
    max=0
    for s in result:
        if(len(s)>max):
            max=len(s)
            last=s
    print(last)

1.2判断回文子串

题目描述:

一个字符串,验证是否回文串,只考虑数字和字母,可以忽略字母的大小写 是返回True

如:abba,abb,a都是回文串

二.将字符串中的0移到最后

  • 输入:

10240

  • 输出:

12400

  • 思路:两个循环遍历,第二次层如果为0,交换到最后
def move0ToEnd(s):
    lens=len(s)
    for i in range(lens):
        if s[i]==0:
            #如果出现0则把0交换到最后
            for j in range(i,lens-1):
                s[j],s[j+1]=s[j+1],s[j]#交换
    return s
def main():
    a = [1, 0, 2, 4, 0]
    print(move0ToEnd(a))
if __name__ == '__main__':
    main()

上方法测试用例不能全通过:[001]或[1001]

方法2

def moveZeroes(self, nums: List[int]) -> None:
        for i in range(len(nums)):
            if(nums[i]==0):
                nums.remove(nums[i])
                nums.append(0)

三.字符串中相同字符删除(消除字符对)

题目描述

碰见对了就消掉,只保留之前字符串。

  • 输入:

ABBCD

  • 输出:

ACD

(BB被消掉)

  • 或输入:

ABBBCD

  • 输出:

ABCD

(前两个BB被消掉)

  • 写法一
  • 思路:建辅助列表tmp。遍历字符串a,如果tmp的最后一位和a[i]相同,tmp后退一位;如果不等,a[i]入tmp
a='ABBCD'
tmp=' '
for i in range(len(a)):
    if tmp[-1]==a[i]:
        #如果tmp最后一个和a[i]下一个相同,去掉tmp最后一个
        tmp=tmp[0:len(tmp)-1]  #或者tmp=tmp[0:-1]  tmp=tmp[:-1]往回走一步
    else:
        tmp+=a[i]
print(tmp)

结果

  • 写法二
  • 思路:本题考查两个相同的数消掉,用异或。如果相同则为0,tmp后退一步,如果不等,a[i]入tmp
def nor(a,b):#异或相同为0,不同为1
    if a==b:
        return 0
    else:
        return 1
a='ABBBCD'
tmp=' '
for i in range(len(a)):
    l=nor(tmp[-1],a[i])
    if l==0:
        #如果tmp最后一个和a[i]下一个相同,去掉tmp最后一个
        tmp=tmp[0:len(tmp)-1]  #或者tmp=tmp[0:-1]  tmp=tmp[:-1]往回走一步
    elif l==1:
        tmp+=a[i]
print(tmp)

结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值