• LeetCode:字符串(三)


    本组囊括字符串相关题目,难度均为简单。

    58. Length of Last Word

    题目描述:简单

    解法一:

    python中的split能很好地解决这个问题:使用split删除空格后逆着遍历即可得到第一个非空字符的长度:

    1 class Solution:
    2     def lengthOfLastWord(self, s: str) -> int:
    3         new_s = s.split(' ')
    4         n = len(new_s)
    5         for i in range(n-1,-1,-1):
    6             if new_s[i] != '':
    7                 return len(new_s[i])
    8         return 0

    解法二:

    不使用split的思路:通过倒序遍历字符串来判断,当倒序到第一个空格是从字符串末尾开始向前遍历,其中主要有两种情况:
    第一种情况,以字符串"Hello World"为例,从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词"World"的长度5
    第二种情况,以字符串"Hello World "为例,需要先将末尾的空格过滤掉,再进行第一种情况的操作,即认为最后一个单词为"World",长度为5
    所以完整过程为先从后过滤掉空格找到单词尾部,再从尾部向前遍历,找到单词头部,最后两者相减,即为单词的长度。

     1 class Solution:
     2     def lengthOfLastWord(self, s: str) -> int:        
     3         n = len(s)
     4         for i in range(n-1,-1,-1):
     5             if s[i] != ' ':
     6                 for j in range(i,-1,-1):
     7                     if s[j] == ' ':
     8                         return i-j
     9                 return i-j+1
    10         return 0
    11         # 时间复杂度:O(n),n为结尾空格和结尾单词总体长度
    12         # 空间复杂度:O(1)

     

    67. Add Binary

    题目描述:简单

    思路一:

    使用内置函数转十进制后相加再转字符串:

    int(x,base)用法,若 x 为 str,则 base 可略可有。

    当base 存在时,视 x 为 base 类型数字,并将其转换为 10 进制数字。

    若 x 不符合 base 规则,则报错。如果是带参数base的话,12要以字符串的形式进行输入,12 为 16进制。

    1 class Solution:
    2     def addBinary(self, a: str, b: str) -> str:
    3         # 思路一,使用内置函数转十进制后相加在转字符串
    4         # int(x,base)用法,若 x 为 str,则 base 可略可有。
    5         # base 存在时,视 x 为 base 类型数字,并将其转换为 10 进制数字。
    6         # 若 x 不符合 base 规则,则报错。如果是带参数base的话,12要以字符串的形式进行输入,12 为 16进制
    7         c = int(a, 2) + int(b, 2)
    8         return '{0:b}'.format(c)

    思路二:

    按比特位逐位运算,设置一个进位,最后如果进位为1,则拼接进位,最后反转即可得到答案。
    首先将两个字符串较短的用0补齐,使得两个字符串长度一致,然后从末尾进行遍历计算,得到最终结果:代码暂时留坑。

    思路三:

    位运算,异或XOR操作:

    • a & b 的结果,左移一位(<< 1)就得到进位数
    • a ^ b ,异或,其实就是不带进位的加法,结果更新给 a
    • 求出得到进位数,更新给 b。
    1 class Solution:
    2     def addBinary(self, a, b) -> str:
    3         x, y = int(a, 2), int(b, 2)
    4         while y:
    5             x, y = x ^ y, (x & y) << 1
    6         return bin(x)[2:] # 输出二进制的数

     

     

    125. Valid Palindrome

    题目描述:简单

    思路一:

    使用内置函数的思路,先用isalnum()去掉所有的标点符号,再使用str.lower()把字母都变为小写;
    字符串反转后再判断即可得到答案。

    1 class Solution:
    2     def isPalindrome(self, s: str) -> bool:
    3         # 使用内置函数的思路,先用isalnum去掉所有的标点符号,再使用str.lower()把字母都变为小写;
    4         # 字符串反转后再判断即可得到答案。
    5         new_s = ''.join(e for e in s if e.isalnum())
    6         new_s = new_s.lower()
    7         reverse_s = new_s[::-1]
    8         return new_s == reverse_s
    9         # 大小写也要改变,统一为小写
  • 相关阅读:
    【转载】uboot的工具mkimage使用方法
    u-boot-2010.3移植到Tiny6410问题总结
    【转载】 GNU GCC 选项说明
    【转载】GCC 预处理器选项
    用kermit通过串口往nandflash任意地址里烧写任何文件!
    自己写Tiny6410的Bootloader总结!
    ARM常用汇编指令介绍
    Ubuntu14.04和Tiny6410挂载NFS服务!
    Tiny 6410的Linux学习总结!
    Tiny6410下的第一个Linux驱动程序
  • 原文地址:https://www.cnblogs.com/Jesee/p/13952462.html
Copyright © 2020-2023  润新知