代码随想录算法训练营Day 7| 344反转字符串,541反转字符串ii,151反转单词

344 反转字符串

  1. 初始化两个指针,一个指向字符串的开头(索引0),另一个指向字符串的末尾(索引len(string) - 1)。
  2. 交换两个指针所指向的字符。
  3. 同时移动两个指针,将它们分别向字符串的中间移动一步。
  4. 重复步骤2和步骤3,直到两个指针相遇。
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:
            s[left], s[right] = s[right],s[left]
            left += 1
            right -= 1
        return s

541 反转字符串ii

  1. 将输入的字符串转换为列表,这样可以通过索引来修改字符。
  2. 设定一个循环,每次迭代从字符串的开头开始,以2k为步长遍历字符串。这是因为每2k个字符为一组进行反转。
  3. 在每个组内部,使用双指针的方法,一个指针 left 指向组的开头,另一个指针 right 指向组的结尾。
  4. 通过交换 left 和 right 指针所指向的字符来实现反转。重复交换,直到 left 指针超过了 right 指针。
  5. 重复步骤2和步骤4,直到遍历完整个字符串。
  6. 将修改后的列表转换回字符串,并返回结果。
class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        string = list(s)
        n = len(string)
        
        for start in range(0, n, 2 * k):
            left = start
            right = min(start + k - 1, n - 1)
            
            while left < right:
                string[left], string[right] = string[right], string[left]
                left += 1
                right -= 1
        
        return ''.join(string)

151 反转单词

  1. 使用空格将给定的字符串拆分为单词,可以使用 split() 方法将字符串拆分成一个单词列表。
  2. 将拆分后的单词列表进行反转。可以使用双指针的方法,一个指针指向列表的开头,另一个指针指向列表的末尾,交换指针所指向的元素,然后逐步移动指针,直到两个指针相遇。
  3. 将反转后的单词列表连接成一个新的字符串。可以使用 join() 方法将列表中的元素连接成一个字符串,以空格作为分隔符。
class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        l = s.split()
        left = 0
        right = len(l) - 1
        while left < right:
            l[left],l[right] = l[right],l[left]
            left += 1
            right -= 1
        return " ".join(l)

你可能感兴趣的:(算法)