1.验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
方法一:利用字符串性质
#方法一:利用字符串性质
def isPalindrome(s):
s=s.lower() #将大写字母变成小写字母
tem=[]
for i in s:
if '0'<=i<='0' or 'a'<=i<='z':
tem.append(i) #去除非字母数字元素
return tem==tem[::-1]
方法二:双指针法
#方法二:双指针法
def isPalindrome(s):
s=s.lower()
left,right=0,len(s)-1
while left<right:
if not s[left].isalnum(): #判断是否是非字母数字元素
left+=1
if not s[right].isalnum():
right-=1
if s[left].isalnum() and s[right].isalnum(): #保证是字母数字元素
if s[right]!=s[left]: #不等直接退出
return False
left+=1
right-=1
return True
2.只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
方法一:直接遍历,利用count函数
#方法一:直接遍历,利用count函数
def singleNumber(nums):
for i in nums:
c=nums.count(i)
if c==1:
return i
方法二:位运算,利用相同的数字异或后为0
#方法二:位运算,利用相同的数字异或后为0
def singleNumber(nums):
x=0
for i in nums: #遍历nums执行异或运算
x^=i
return x #返回只出现一次的数字