Leecode剑指offer之:字符串

题目1:(简单)

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。

class Solution:
    def reverseWords(self, s: str) -> str:
        if s is None:
            return " "
        s_lst = s.split(" ")
        s_lst = s_lst[::-1]
        s_lst = [i for i in s_lst if i != '' and i != " "]  #清除列表中所有空值
        string_new = " ".join(s_lst)
        return string_new
    
if __name__ == '__main__':			#测试用例
    string = 'a good   example'
    S = Solution()
    string_new = S.reverseWords(string)
    print(string_new)

题目2:(简单)

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转操作的功能。
比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        str_pick_1 = s[0:n]
        str_pick_2 = s[n:len(s)]
        string =  str_pick_2 + str_pick_1
        return string



if __name__ == '__main__':		#测试用例
    string = 'cdefgab'
    n = 2
    s = Solution()
    s.reverseLeftWords(string,n)

题目3:(中等)

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明: 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [ − 2 31 −2^{31} 231, 2 31 − 1 2^{31}-1 2311]。如果数值超过这个范围,请返回 INT_MAX ( 2 31 − 1 2^{31}-1 2311) 或 INT_MIN ( − 2 31 −2^{31} 231) 。

这道题通过正则表达式来完成需求,是一件非常容易而且顺畅的事情~

import re

class Solution:
    def strToInt(self, str: str) -> int:
        INT_MIN = -2147483648
        INT_MAX = 2147483647
        number = 0
        #首先去除多余空白字符
        str = str.strip()

        if re.match('[a-zA-Z_]',str):	#匹配首个元素是否为字母
            return 0

        elif re.match('-',str):			#匹配首个元素是否为负号
            number_str = re.match('-\d*',str).group()
            # print(number_str)
            try:
                number = int(number_str)        #只有一个 - 的情况,也是不行的
            except Exception as e:
                return 0

		elif re.match('\+',str):
            number_str = re.match('\+\d*',str).group()
            try:
                number = int(number_str[1:])        #只有一个 + 的情况,也不行,而且转化的时候要把第一个 + 忽略
            except Exception as e:
                return 0
                
        elif re.match('\d',str):	
            number_str = re.match('\d*',str).group()
            number = int(number_str)

        

        if number < INT_MIN:		#最后判断转化的值是否超出范围
            return INT_MIN
        elif number > INT_MAX:
            return INT_MAX
        else:
            return number



if __name__ == '__main__':		#测试用例
    string = "+1"
    s = Solution()
    number = s.strToInt(string)
    print(number)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值