python leetcode2

这篇博客涵盖了Python在LeetCode中的应用,包括验证回文串、字符串转换整数、外观数列和链表问题,如删除链表节点、反转链表和合并有序链表。博主分享了解题思路和技巧,强调了双指针、递归和节点操作的重要性。
摘要由CSDN通过智能技术生成

125. 验证回文串

'''
    给定一个字符串,验证它是否为回文串,它其中包含了很多,但只考虑<<数字字符和字母>>
    注意:
        --忽略大小写
            解决方法:
                1.直接使用str.lowwer()转化为小写字符
                2.每次循环自己判断
                    if s[i]>s[n-i] 这样可以假设s[i]为小写字母,s[n-i]为大写字母
                        if s[i]-32=s[n-i]那么就说明[i]是[n-i]的小写
                            就可以该干嘛干嘛了
                都差不多,但是既然有时间,就第二种吧

        --不考虑除数字字符和字母以外的其他
            如何判断是数字字符和字母???
            有点不知道怎么写,先用人家的代码判断吧

'''

'''
    双指针+杂七杂八的判断
    哈哈哈写完了,写之前就感觉有点问题这种方法,最后果然,可读性太差了
    也不想优化细节了,就这样吧
'''
def fun1(s):
    cur=0#左指针
    n=len(s)-1
    while cur<=n:
        #判断是不是数字和字符
        if s[cur].isalnum():
            #说明s[cur]是字母或数字
            if s[n].isalnum():
                #s[n]说明是数字或字母
                if s[cur]!=s[n]:#他俩不一样,已经不能两个都是数字了
                    if s[cur].isalpha() and s[n].isalpha():#判断是不是都是字母,如果是还能走下去
                        if ord(s[cur])-ord(s[n])!=32 and ord(s[n])-ord(s[cur])!=32:
                            #也就是说他俩不是大小字母关系
                            return False
                    else:
                        return False
                cur+=1
                n-=1
            else:
                #不是数字,字母,往前移
                n-=1
        else:
            #不是数字,字母,往后移
            cur+=1
    return True

print(fun1("0P"))#哈哈哈,正好对上了,所以不能这样搞了
print(ord('0'))
print(ord('P'))

'''
    方法1:答案的代码,还是可读性好一些,基本思路是一样的
'''
def fun2(s):
    n = len(s)
    left, right = 0, n - 1
    while left < right:
        while left < right and not s[left].isalnum():
            left += 1
        while left < right and not s[right].isalnum():
            right -= 1
        if left < right:
            if s[left].lower() != s[right].lower():
                return False
            left, right = left + 1, right - 1

    return True


'''
    哈哈哈直接这样写,多爽
    我不知道怎么判断这个字符是不是数字字符或者字母
    这是个对于我来说的难点
'''

def fun3(s):
    sum1=''
    for i in s:
        if i.isalnum():
            sum1+=i.lower()
    return sum1==sum1[::-1]

fun3("A man, a plan, a canal: Panama")

==========================================================================================================================================================================================================================================================================================================================================
8. 字符串转换整数 (atoi)
这个题目记得去看一下答案,学习一下思想
自动机,哈哈哈新玩意
我现在没仔细看,但我决定我的思想差不多
找到什么时候开始,什么时候结束
可能出现的各种情况

'''
    让我实现一个算法,字符串转整数
    算法如下:
        --丢弃无用的最开始的"前导空格"

        --检测走过最开始空格后的第一个字符

            ==如果是'-'或'+'则确定了结果的正负
            ==如果是数字,则默认为正数

        --在前导空格结束后遇到非数字直接结束对字符串的遍历

        --对于0032这类,以0开头的数字将0删除

        --对于超出[-2**31,2**31-1]的数字进行截断操作

        --返回结果为整数

    提示:
        s 由英文字母(大写和小写)、数字(0-9)、' '、'+'、'-' 和 '.' 组成
'''


'''
    先想一下思路,我现在写完了
    但是我不想写思路了,没啥太大的难度,想好所有可能出现的情况,并进行排除就好了
    我要去和妹子聊天,嗯再见
    
'''

'''

'''
def fun1(s):
    for i in range(len(s)):
        if s[i].isalpha() or s[i] == '.':  # 第一个非空格的是个字符
            return 0
        elif s[i] in (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值