4.4 路径加密(LC122-E)

算法:

字符串不能改,必须转成列表,才能修改

调试过程:

class Solution:
    def pathEncryption(self, path: str) -> str:
        s = list(path)
        for i in s:
            if i == ".":
                i = " "
        s = str(s)
        return s

原因:不能直接把列表再转成字符串输出,否则结果就会像这样

可以用Join函数,直接把列表元素以某种分隔符连在一起(不指定就是默认不加分隔符,直接连),并返回一个字符串。

修改后:

class Solution:
    def pathEncryption(self, path: str) -> str:
        s = list(path)
        for i in s:
            if i == ".":
                i = " "
        s = ().join(s)
        return s

原因:join调用得不对。

`join()` 函数是用于将一个可迭代对象的元素连接成一个字符串。它的基本语法如下:

separator.join(iterable)

其中,`separator` 是一个字符串,用于指定连接元素之间的分隔符,而 `iterable` 则是一个可迭代对象,例如列表、元组、字符串等。

下面是一个简单的示例,演示如何使用 `join()` 函数:

# 使用空格作为分隔符将列表的元素连接成一个字符串  
my_list = ['Hello', 'World', 'Python']  
result = ' '.join(my_list)  
print(result)  
# 输出: Hello World Python  
  
# 使用逗号作为分隔符将元组的元素连接成一个字符串  
my_tuple = ('apple', 'banana', 'orange')  
result = ', '.join(my_tuple)  
print(result)  
# 输出: apple, banana, orange  
  
# 使用连字符作为分隔符将字符串的字符连接成一个字符串  
my_string = 'OpenAI'  
result = '-'.join(my_string)  
print(result)  
# 输出: O-p-e-n-A-I  

我的错误:由于join返回一个字符串,间隔符应该用引号表示,而不是括号。

修改后:

原因:

在这个循环中,我使用变量 `i` 来迭代列表 `s` 中的元素。然后,如果 `i` 的值是 “.”,我尝试将 `i` 替换为 " "。然而,这种替换方式是不起作用的,因为在循环中,变量 `i` 仅仅是一个临时变量,它的值的修改不会影响到列表 `s` 中的元素。

为了解决这个问题,可以使用索引来直接修改列表 `s` 中的元素。

正确代码:

class Solution:
    def pathEncryption(self, path: str) -> str:
        s = list(path)
        n = len(s)
        for i in range(n):
            if s[i] == ".":
                s[i] = " "
        s = "".join(s)
        return s

时间空间复杂度:

时间复杂度:

  1.  首先,将输入的字符串 `path` 转换为列表 `s`,这需要 O(n) 的时间,其中 n 是字符串的长度。
  2. 接下来,通过遍历列表 `s`,将 "." 替换为 " "。这个过程的时间复杂度为 O(n),其中 n 是列表 `s` 的长度。
  3.  最后,使用 `"".join(s)` 将列表 `s` 转换回字符串,这也需要 O(n) 的时间。

因此,整个 `pathEncryption` 方法的时间复杂度为 O(n)。

空间复杂度: -

  1. 首先,创建了一个列表 `s`,其空间复杂度为 O(n),其中 n 是输入字符串的长度。 -
  2. 然后,使用 `"".join(s)` 创建了一个新的字符串,其空间复杂度也为 O(n)。
  3. 因此,整个 `pathEncryption` 方法的空间复杂度为 O(n)。

需要注意的是,时间复杂度和空间复杂度都是针对输入的字符串长度而言。在这个问题中,使用了一个额外的列表来进行字符替换,因此空间复杂度是线性的。如果不使用额外的列表,而是直接在原字符串上进行替换,可以将空间复杂度降低到 O(1)。(可惜python的字符串不可变,必须转成列表)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值