(补)代码随想录算法训练有营DAY8|Leetcode 344、541、卡码网54

文章链接:代码随想录

344.反转字符串 + 541. 反转字符串II + 卡码网:54.替换 数字
字符串基础,比较简单,但是ACM模式还是不够熟悉
344.反转字符串
状态:挺简单的,双指针思想,看了下视频确认自己的思路正确后写代码
思路:双指针,从数组头尾两端开始依次反转元素
总结:
1. (引自代码随想录)
     如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。
    如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。
2. Python中的库函数:s.reverse(),s[:]=reversed(s),以及切片用法 s[:] = s[: : -1]
3. 时间复杂度O(n), 空间复杂度O(1)
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        left, right = 0, len(s) - 1

        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s

541. 反转字符串II

状态:自己试着解题,但是考虑的比较复杂,没有完全理清思路;之后看视频之后理清了思路

思路:沿用344.反转字符串中的reverse()函数思想,将字符串转换为list后,通过切片方式将字符串进行反转操作

总结:

1. 遍历字符串的步进设置为2*k,来判断是否有需要反转的区间

2. Python中, 对字符串 s='abc' 使用 s[0:99]时,返回的仍是 'abc'。

    解释:字符串末尾如果超过最大长度,则会返回至字符串最后一个值,避免了边界条件的处理

3. 在Python中字符串是不可变的,不能像操作列表或字典那样,直接对字符串的某个位置上的字符进行赋值,例如s[0] = 'a', s[0:2] = s[0:2][0:2:-1]等是非法操作。因此,本题中要先将str转换为list,再用切片进行替换。另外,返回值需要用join()函数将处理好的list转换为字符串(关于join()函数可参考:Python join()方法 | 菜鸟教程

4. 时间复杂度O(n), 空间复杂度O(n)

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        def reverse(string):
            left, right = 0, len(string) - 1
            while left < right:
                string[left], string[right] = string[right], string[left]
                left += 1
                right -= 1
            return string

        s1 = list(s)
        for i in range(0, len(s), 2*k):
            s1[i:i+k] = reverse(s1[i:i+k])

        return ''.join(s1) 

卡码网:54.替换数字

状态:有思路,但是对ACM模式不够熟悉,导致解题时遇到问题

思路:先将str转换为list,一个for循环遍历list,找到数字字符并将其转换为‘number'

总结:

1. 判断是否为数字字符,可直接用 .isdigit()函数

2. ACM模式下的输入输出可以有多种形式,都要熟悉掌握

3. 时间复杂度O(n), 空间复杂度O(n)

# class Solution: 
#     def change(self, s):
#         res = list(s)
#         for i in range(len(res)):
#             if res[i].isdigit():
#                 res[i] = "number"
#         return ''.join(res)
        
# sol = Solution()
# s = input()
# result = sol.change(s)
# print(result)

s = input()
lst = list(s)
for i in range(len(lst)):
    if lst[i].isdigit():
        lst[i] = 'number'
print( ''.join(lst))

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值