目录
一.判断回文串
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)
结果