首页 > 编程语言 >代码训练营第八天(Python)| 344.反转字符串、541. 反转字符串II、05.替换空格、151.翻转字符串里的单词、58-II.左旋转字符串

代码训练营第八天(Python)| 344.反转字符串、541. 反转字符串II、05.替换空格、151.翻转字符串里的单词、58-II.左旋转字符串

时间:2023-10-18 21:36:24浏览次数:43  
标签:right 反转 list II start str 字符串 password left

344.反转字符串

双指针法
时间复杂度为: 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

注意点: 使用切片处理掉边界的问题
方法一

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

        res_s = list(s)
        for i in range(0, len(s), 2*k):   # 每次 2k 的步距
            res_s[i:i+k] = helper(res_s[i:i+k]) # 反转 k 或者小于k的列表
        return "".join(res_s)

方法二

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        start = 0    # start 开始位置
        while start < len(s):
            rev_p = start + k   # rev_p 需要反转的位置
            s = s[:start] + s[start:rev_p][::-1] + s[rev_p:]
            start += 2*k   # 每次 2k 步距移动
        return s

05.替换空格

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

151.翻转字符串里的单词

class Solution:
    def reverseWords(self, s: str) -> str:
        s_list = s.split() # split 不传参数获取非空格的元素
        left, right = 0, len(s_list) - 1
        while left < right:
            s_list[left], s_list[right] = s_list[right], s_list[left]
            left += 1
            right -= 1
        return " ".join(s_list)

58-II.左旋转字符串

1、使用切片

class Solution:
    def dynamicPassword(self, password: str, target: int) -> str:
        return password[target:] + password[:target]

2、使用自定义的reverse,以列表反转方式代替其他语言的原地字符串操作

class Solution:
    def dynamicPassword(self, password: str, target: int) -> str:
        password_l = list(password)
        self.reverse(password_l, 0, target-1)
        self.reverse(password_l, target, len(password_l)-1)
        self.reverse(password_l, 0, len(password_l)-1)
        return "".join(password_l)


    def reverse(self, s_list, start, end):
        while start < end:
            s_list[start], s_list[end] = s_list[end], s_list[start]
            start += 1
            end -= 1

标签:right,反转,list,II,start,str,字符串,password,left
From: https://www.cnblogs.com/yixff/p/17771097.html

相关文章

  • ACS系列(6) ACS QT版SPiiPlusClibraryDemo
    工程文件QT+=coreguigreaterThan(QT_MAJOR_VERSION,4):QT+=widgetsCONFIG+=c++17#YoucanmakeyourcodefailtocompileifitusesdeprecatedAPIs.#Inordertodoso,uncommentthefollowingline.#DEFINES+=QT_DISABLE_DEPRECATED_BEFORE=0x......
  • [vue]精宏技术部试用期学习笔记 II
    精宏技术部试用期学习笔记(vue)router:vue的模拟路由前置准备安装vue-routerpnpmivue-router@4//安装版本4的vue-router可以在package.json文件中查看依赖"dependencies":{"vue":"^3.3.4","vue-router":"4"//这里},新建文件夹/src......
  • Java 新手如何使用Spring MVC 中的查询字符串和查询参数?
    Java新手如何使用SpringMVC中的查询字符串和查询参数?根据维基百科的说法,“查询字符串是统一资源定位符(URL)的一部分,它为指定的参数分配值。查询字符串通常包括由Web浏览器或其他客户端应用程序添加到基本URL的字段,例如作为HTML的一部分、选择页面的外观或跳转到多媒体内容......
  • 字符串拼接小技巧
    常用写法下:Stringname=name+"("+id+")"像上面这种情况可以使用String.format()快速实现字符串的拼接:Stringname=String.format("%s(%s)",name,id.toString());......
  • 找到s字符串中的回文子串
    #coding=utf-8#找到s字符串中的回文子串s="abbc"#n=len(s)#result=''#foriinrange(n):##print(i)#forjinrange(i,n):##print(j)#k=s[i:j+1]##print(k)##print(k[::-1])#ifk==k......
  • redis普通连接和连接池, redis字符串类型,redis hash类型, redis列表类型
    1redis普通连接和连接池......
  • delphi 判断字符串里的char是单字节还是双字节的前一位或后一位。
    function  ByteType(const  S:  string;  Index:  Integer):  TMbcsByteType;  // 判断一个字符串中,某个 Char 是单个字母,还是双字节的前一位或后一位。  // mbSingleByte单字母  // mbLeadByte  双字节第一位  // mbTrailByte ......
  • C语言---去掉字符串中的空格
    有时候,我们会遇到,字符串中有空格,那如何删除呢?要删除空格,就需要找到空格,找到空格,就需要遍历字符串。下面是示例代码:(分别使用了for和while循环)#include<stdio.h>#include<stdlib.h>#include<ctype.h>voidfun(char*str){ inti=0; char*p; /*标记:p=str表示指针指......
  • ABAP 字符串换行符等等字符处理
    https://www.cnblogs.com/jinyin/p/10850565.html  cl_abap_char_utilities=>horizontal_tabTAB符cl_abap_char_utilities=>cr_lf回车换行cl_abap_char_utilities=>vertical_tab垂直制表符cl_abap_char_utilities=>newline换行......
  • 软件测试|Python字符串拼接详细解析
    简介在Python编程中,字符串拼接是一个非常常见的操作,它允许我们将多个字符串连接成一个新的字符串。字符串拼接在处理文本和数据时非常有用,比如构建消息、生成文件路径、格式化输出等。在本文中,我们将深入探讨Python中字符串拼接的不同方法和技巧。方法一:连续书写拼接在Python......