代码随想录算法训练营第7天—字符串01 | ● 344.反转字符串 ● *541. 反转字符串II ● 卡码网:54.替换数字 ● 151.翻转字符串里的单词 ● 卡码网:55.右旋转字符串

344.反转字符串

题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html

  • 考点
    • 双指针
  • 我的思路
    • 双指针
  • 视频讲解关键点总结
    • 和我的思路一致
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
class Solution(object):
    def reverseString(self, s):
        """
        :type s: List[str]
        :rtype: None Do not return anything, modify s in-place instead.
        """
        left = 0
        right = len(s) - 1
        while left < right:
            alter = s[right]
            s[right] = s[left]
            s[left] = alter
            left += 1
            right -= 1
        return s

*541. 反转字符串II

题目链接/文章讲解/视频讲解:https://programmercarl.com/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.html

  • 考点
    • 循环逻辑优化
    • 怎么改变不可变类型的字符串
  • 我的思路
    • 对题目中不同的情况进行if else判断
  • 视频讲解关键点总结
    • 未看视频
    • 文字讲解的重点有二
      • 一个是循环逻辑优化,通过for循环每次移动2k步长来替代复杂的if else判断
      • 二是字符串不能直接修改,因此借助中间变量列表进行修改,之后通过’'.join(list)`来转换回str
  • 我的思路的问题
    • 逻辑有待优化
  • 代码书写问题
    • 字符串是不可变类型,因此想要修改字符串,可以先将其转为列表,在对列表处理完后通过表达式''.join(list)来转换回str
  • 可执行代码
class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        my_list = list(s)
        for i in range(0, len(my_list) - 1, 2 * k):
            left = i
            right = min(i + k - 1, len(my_list) - 1)
            while left < right:
                alt = my_list[left]
                my_list[left] = my_list[right]
                my_list[right] = alt
                left += 1
                right -= 1
        return ''.join(my_list)

卡码网:54.替换数字

题目链接/文章讲解:https://programmercarl.com/kama54.%E6%9B%BF%E6%8D%A2%E6%95%B0%E5%AD%97.html

  • 考点
    • 列表字符串转换
    • 判断字符类型(数字or字母)
  • 我的思路
    • list()''.join(list)来转换列表和字符串
    • char.isdigit()char.isalpha()判断一个字符是数字还是字母
      • 或者用ord(char)是否大于等于ord(‘a’)且小于等于ord(‘z’)来通过Unicode编码判断其是否为小写字母
  • 视频讲解关键点总结
    • 本题无讲解
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
stri = input()
line = list(stri)
for i, data in enumerate(line):
    if data.isalpha():  
        continue
    else:
        line[i] = 'number'
print(''.join(line))

151.翻转字符串里的单词

题目链接/文章讲解/视频讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html

  • 考点
    • 字符串利用切片进行翻转
    • 双指针
  • 我的思路
    • 将字符串用split切割为列表
    • 用双指针翻转列表顺序
    • 利用' '.join(list)转换回字符串并返回
  • 视频讲解关键点总结
    • 未看视频
    • 文字教程里提供了另一个思路,即使用切片翻转的操作,更为便利,如s = s[::-1]将会把当前字符串翻转并赋值回给s
      • 切片实际是调用了对象的__getitem__方法,由于字符串是不可变类型,因此需要接收返回值才能实现修改原字符串的效果,此时的s实际上是一个新的字符串
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        s = s[::-1]
        s = ' '.join(word[::-1] for word in s.split())  # 这里的列表推导式将生成一个新的列表(因为列表推导式总是会生成一个新的列表)
        return s

卡码网:55.右旋转字符串

题目链接/文章讲解:
https://programmercarl.com/kama55.%E5%8F%B3%E6%97%8B%E5%AD%97%E7%AC%A6%E4%B8%B2.html

  • 考点
    • 字符串切片
  • 我的思路
    • 创建一个新字符串等于最后需要的几个字符的切片加上前面字符串的切片
  • 视频讲解关键点总结
    • 本题无python版本讲解
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
number = int(input())
stri = input()
new_stri = stri[len(stri) - number:] + stri[:len(stri) - number]
print(new_stri)

你可能感兴趣的:(Leetcode,代码随想录(Python),算法,python)