首页 > 其他分享 >day8| 344.反转字符串;541.反转字符串II;剑指offer 05.替换空格;151.翻转字符串里的单词;剑指offer 58.左旋转字符串

day8| 344.反转字符串;541.反转字符串II;剑指offer 05.替换空格;151.翻转字符串里的单词;剑指offer 58.左旋转字符串

时间:2023-03-31 14:25:19浏览次数:37  
标签:offer 反转 self str res 字符串 def 2k

344.反转字符串

 

题目简述:

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组,使用O(1)的额外空间解决这一问题。

 

解题思路:

没什么好说的,直接双指针

 

代码如下:

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

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

 

 

541.反转字符串II

 

 

题目简述:

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

 

思路:

老实说,一开始没怎么看懂题目。后来理解了,意思是从左到右从1数到2k,这样算一个循环,然后反转前k个字符,之后数数又从1开始,即遍历到第2k+1个字符从1开始数,不是说回过头去遍历第一个字符。

1. 首先把字符串转为列表

2. 利用for循环遍历,每次走2k步,也即0,2k,4k......这样取值

3. 对下标为[0,2k-1],[2k,4k-1]......的分片列表进行反转

4. 利用join函数整合成为字符串

 

代码如下:

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        t = list(s)
        for i in range(0, len(t), 2 * k):
            t[i: i + k] = reversed(t[i: i + k])
        return "".join(t)

 

 

剑指Offer 05.替换空格

 

题目简述:

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

 

思路:

1. 创建一个空列表。

2. 遍历s,遇到字符,往空列表中append该字符;遇到空格,append %20即可

3. 利用join函数输出

 

代码实现:

class Solution:
    def replaceSpace(self, s: str) -> str:
        res = []
        for c in s:
            if c == ' ': res.append("%20")
            else: res.append(c)
        return "".join(res)

 

151.翻转字符串里的单词

 

思路:

1. 去除字符串开头和结尾的空白字符

2. 去掉字符串间多余的空白字符

3. 翻转整个字符串

4. 逐个翻转各个单词

 

代码如下:

class Solution:
    def trim_spaces(self, s: str) -> list:
        left, right = 0, len(s) - 1
        # 去掉字符串开头的空白字符
        while left <= right and s[left] == ' ':
            left += 1
        
        # 去掉字符串末尾的空白字符
        while left <= right and s[right] == ' ':
            right -= 1
        
        # 将字符串间多余的空白字符去除
        output = []
        while left <= right:
            if s[left] != ' ':
                output.append(s[left])
            elif output[-1] != ' ':
                output.append(s[left])
            left += 1
        
        return output
            
    def reverse(self, l: list, left: int, right: int) -> None:
        while left < right:
            l[left], l[right] = l[right], l[left]
            left, right = left + 1, right - 1
            
    def reverse_each_word(self, l: list) -> None:
        n = len(l)
        start = end = 0
        
        while start < n:
            # 循环至单词的末尾
            while end < n and l[end] != ' ':
                end += 1
            # 翻转单词
            self.reverse(l, start, end - 1)
            # 更新start,去找下一个单词
            start = end + 1
            end += 1
                
    def reverseWords(self, s: str) -> str:
        l = self.trim_spaces(s)
        
        # 翻转字符串
        self.reverse(l, 0, len(l) - 1)
        
        # 翻转每个单词
        self.reverse_each_word(l)
        
        return ''.join(l)

 

剑指Offer 58-II.左旋转1字符串

 

思路1:

1. 创建空res

2. 使用切片

3. 传入res

 

代码如下:

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        return s[n:] + s[:n]

 

思路2:

列表遍历拼接

 

代码如下:

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        res = []
        for i in range(n, len(s)):
            res.append(s[i])
        for i in range(n):
            res.append(s[i])
        return ''.join(res)

 

思路3:

字符串遍历拼接

 

代码如下:

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        res = ""
        for i in range(n, len(s)):
            res += s[i]
        for i in range(n):
            res += s[i]
        return res

 

列表用append,字符串用+。

 

标签:offer,反转,self,str,res,字符串,def,2k
From: https://www.cnblogs.com/cp1999/p/17275965.html

相关文章

  • 全网最详细中英文ChatGPT-GPT-4示例文档-智能编写Python注释文档字符串从0到1快速入门
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 简单介绍python列表元素拼接成字符串的4种方法
    本文主要介绍了python列表元素拼接成字符串的4种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧前言我们在分析列表数据时,常常需要对列表数据进行输出或多列表关联拼接。直接使用列表,列表中的各元素以逗......
  • 字符串常用方法
    1.capitalize()方法:将字符串的首字母大写。str="hello,world"print(str.capitalize())输出:Hello,world2.casefold()方法:将字符串转换为小写并删除所有大小写特有的字符,使字符串可以比较。str="Hello,WORLD"print(str.casefold())输出:hello,world3.center()方......
  • C#文档转为Base64位字符串
    publicstaticstringDocumentToBase64Str(stringfileName){FileStreamfilestream=newFileStream(fileName,FileMode.Open);byte[]bt=newbyte[filestream.Length];//调用read读取方法filestr......
  • 力扣---面试题 01.09. 字符串轮转
    字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1:输入:s1="waterbottle",s2="erbottlewat"......
  • 实验2 字符串和列表
    task1.pyx='nbaFIFA'print(x.upper())print(x.lower())print(x.swapcase())print()x='abc'print(x.center(10,'*'))print(x.ljust(10,'*'))print(x.rjust......
  • JavaScript系列 -> 字符串方法 replace 的第二个参数为函数
    本篇文章要介绍,当字符串的replace方法第二个参数为函数的使用。示例代码:functionfn(str){this.str=str;}fn.prototype.format=function(){vararg=......
  • 树:剑指 Offer 07. 重建二叉树
    题目描述:输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例1: Input:pre......
  • 轴刻度为字符串
    上面的程序运行起来,X轴的刻度是数字,如果我们希望轴刻度是文字怎么做呢?我们参考了这个网址的介绍: https://stackoverflow.com/questions/31775468/show-string-values-......
  • 字符串函数_Linux_python_R_SQL
    字符串处理grep查找命令筛选信息awkcut按照指定要求分割-awk截取列信息cut截取字符串信息awkFS对第一行没作用要用大写的BEGIN方法01.利用exp......