逐行解释版力扣合集 String Easy 1-3 reverse string - First uniq char 深拷贝浅拷贝

Easy String 1 Reverse String 

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        #
        s[:]= s[::-1]

这是Python的列表或字符串反转代码。我将一步步解释它。

首先,s 是一个列表或字符串。

s[::-1] 是一个使用了Python的切片(slice)功能的语句。切片的格式一般是 start:stop:step,其中,start 是切片开始位置,stop 是切片结束位置(不包括该位置上的元素),step 是步长。在这里,省略了 startstop,表示从头到尾,而 step 是 -1,表示从后向前取,也就是反向。因此,s[::-1] 就表示把 s 反过来。

s[:] 是一个新的 s 的拷贝。当你将其设置为 s[::-1],你实际上将 s 设置为它自己的反转版本。注意,如果 s 是一个列表,这会改变原列表的顺序,因为列表是可变的。如果 s 是一个字符串,原始字符串并不会改变,因为字符串在Python中是不可变的。这种做法会返回一个新的反转的字符串,因为这个赋值操作实际上创建了一个新的字符串

`s[:]` 在 Python 中创建了 `s` 的一个浅拷贝(shallow copy)。浅拷贝和深拷贝(deep copy)是 Python 中关于对象复制的两个重要概念。

浅拷贝是指复制对象本身,但不复制对象中引用的其他对象。换句话说,如果你有一个包含其他对象的复合对象(比如列表或字典),那么浅拷贝只会复制这个复合对象本身,而不会复制它包含的对象。这意味着原对象和拷贝对象中的子对象其实是同一个对象

深拷贝则不同,它会复制对象及其所有子对象,使得原对象和拷贝对象完全独立

所以在这里,`s[:]` 创建的是 `s` 的一个浅拷贝。如果 `s` 是一个嵌套列表(比如 `s = [[1, 2], [3, 4]]`),则 `s[:]` 和 `s` 将共享内部的子列表。这意味着如果你修改了 `s[:]` 中的一个子列表,那么 `s` 中对应的子列表也会被改变。

如果你需要创建一个完全独立的深拷贝,你可以使用 `copy` 模块的 `deepcopy` 函数,如 `copy.deepcopy(s)`。

String 2 Reverse String 整数反转

class Solution:
    def reverse(self, x: int) -> int:
        if x < 0:
            sign =-1
        else:
            sign =1
        
        x*= sign        
        reversed_x = int(str(x)[::-1])
        
        if reversed_x > 2**31-1:
            return 0
        else:
            return sign * reversed_x
        

Easy String 3 First Uniq Character

 请逐行解释以下代码:

class Solution:
    def firstUniqChar(self,s:str) ->int:
        frequency =collections.Counter(s)
        for i,ch in enumerate(s):
            if frequency[ch] ==1:
                return i
        return -1

这是一个Python类,其中定义了一个名为firstUniqChar的方法,该方法旨在找到给定字符串中的第一个唯一字符。

让我们来一行一行地解释这段代码。

 
 

pythonCopy code

class Solution:

定义了一个名为Solution的新类。

 
 

pythonCopy code

def firstUniqChar(self,s:str) ->int:

在这个类中定义了一个方法firstUniqChar,它接收一个名为s的字符串参数,并返回一个整数值。self是类的一个实例,Python会自动传递它。在类的方法中,你会经常看到它。

 
 

pythonCopy code

frequency =collections.Counter(s)

这里,collections.Counter(s)是一个Python库函数,用于计算字符串s中每个字符出现的次数,并将结果以字典的形式返回,赋值给变量frequency。例如,如果s = 'hello',则frequency = {'h': 1, 'e': 1, 'l': 2, 'o': 1}

 
 

pythonCopy code

for i,ch in enumerate(s):

这行代码遍历字符串s中的每个字符及其索引。enumerate(s)函数返回一个元组,包含当前字符的索引(赋值给i字符本身(赋值给ch

 
 

pythonCopy code

if frequency[ch] ==1:

这里检查字典frequency中,字符ch出现的次数是否为1。如果是,说明这个字符在字符串s中是唯一的。

 
 

pythonCopy code

return i

如果上述条件为真,方法将返回该字符的索引i

 
 

pythonCopy code

return -1

如果在字符串s中没有找到唯一的字符,方法将返回-1

总的来说,这段代码会查找并返回在输入字符串s中第一个出现且仅出现一次的字符的索引。如果没有这样的字符,返回-1

猜你喜欢

转载自blog.csdn.net/sinat_37574187/article/details/131276546