这里是目录

  • 344. 反转字符串
    • 题目
    • Solution
  • 541. 反转字符串 II
    • 题目
    • Solution(v1)
    • Solution(v2)
  • 剑指 Offer 05. 替换空格
    • 做题记录
  • 151. 反转字符串中的单词
    • 题目
    • My solution
    • 反思
  • 剑指 Offer 58 - II. 左旋转字符串
    • 题目
    • My solution(切片法)
    • 非切片法

344. 反转字符串

调用库函数:s.reverse(),对象是数组!!!!
不用库函数:双指针问题
很简单的题

题目

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

Solution

class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""#s.reverse()for i in range(len(s)):if(i==len(s)//2):breakj=len(s)-i-1temp=s[j]s[j]=s[i]s[i]=temp

541. 反转字符串 II

题目

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

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

Solution(v1)

class Solution:# 该题目的意思是2k个2k个一组!!!!def reversesubStr(self,s):left=0right=len(s)-1while(left<right):temp=s[right]s[right]=s[left]s[left]=templeft+=1right-=1return sdef reverseStr(self, s: str, k: int) -> str:res=list(s)for cur in range(0,len(s),2*k):#步调以2kres[cur:cur+k]=self.reversesubStr(res[cur:cur+k])return ''.join(res)

字符串与字符串数组不同,字符串不能直接修改,上面的方法将字符串转换为了字符串数组,对其中的切片进行反转,然后再将元素组合成字符串返回

Solution(v2)

class Solution:def reverseStr(self, s: str, k: int) -> str:# Two pointers. Another is inside the loop.p = 0while p < len(s):p2 = p + k# Written in this could be more pythonic.s = s[:p] + s[p: p2][::-1] + s[p2:]p = p + 2 * kreturn s

s[::-1]:翻转字符串
v2用了字符串的连接

剑指 Offer 05. 替换空格

'''
class Solution:def replaceSpace(self, s: str) -> str:for i in range(len(s)):print(i)if s[i]==' ':s=s[:i]+'%20'+s[i+1:]temp=i#怎么把i往前跳len(%20)的步数?没有解决->原地修改数组不容易实现return 1
'''
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)

做题记录

一开始尝试了上面的写法,即用字符串的切片原地修改字符串。但是发现插入的%20会增大原字符串的长度,导致循环的i不能依次遍历。
记得return的这种处理字符串的写法!!!

151. 反转字符串中的单词

题目

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

My solution

class Solution:def reverseWords(self, s: str) -> str:#先把首位的空格给去掉for i in range(len(s)):if(s[i]==' '):continueelse:breakfor j in range(len(s)-1,-1,-1):if(s[j]==' '):continueelse:breaks=s[i:j+1]res=[]p1=len(s)-1#初始检测空格的位置for i in range(len(s)-1,-1,-1):#print(list(s))if(i<=len(s)-2 and s[i]==' ' and s[i+1]==' '):p1=icontinueif(s[i]==' '):p2=iif(p1==len(s)-1):res.append(s[p2+1:])res.append(' ')p1=p2else:res.append(s[p2+1:p1])res.append(' ')p1=p2if(i==0):if(p1==len(s)-1):res.append(s[:])else:res.append(s[:p1])return ''.join(res)
  1. 移除多余空格:首先先把数组的首位的空格先去掉;其次移除掉字符串中单词间隔不止用一个空格,也需要做处理
  2. 一定要注意边界情况,比如p1表示第一个空格的位置,它初始化为了数组末尾。p2表示下一个空格的位置。一般情况下切片s[p2+1,p1](切片是左闭右开)。但是需要注意如果p1一直没有更新,即一直在末尾的话,这样写就会漏掉最后一个字母。看最后if-else的处理

反思

  1. 其实我在做的就是用双指针实现了字符串的split,Suzy真厉害没有调用库函数,小狗鼓掌!!!
  2. 但是缺点是用到了辅助的内存空间,即空间复杂度是O(n)不是O(1)

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

题目

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

My solution(切片法)

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

非切片法

听说有的面试不允许用切片法???莫拉古?????

class Solution:def reverseLeftWords(self, s: str, n: int) -> str:s = list(s)s[0:n] = list(reversed(s[0:n]))s[n:] = list(reversed(s[n:]))s.reverse()return "".join(s)

这是我复制的

  1. 先把字符串变成字符串数组
  2. 反转前n个元素组成的子数组
  3. 反转剩余元素组成的子数组
  4. 反转整个数组
  5. 将字符串数组转换为字符串输出
    好聪明!!!!哪个聪明蛋想的这么牛

Suzy找到实习了吗Day 8 | 字符串开始啦 344. 反转字符串,541. 反转字符串 II,剑指 Offer 05. 替换空格,151. 反转字符串中的单词,左旋转字符串相关推荐

  1. 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

    一.344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的 ...

  2. 代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符

    一.344.反转字符串 力扣 思路:很简单的一个for循环双指针,left和right交换. class Solution {public void reverseString(char[] s) { ...

  3. 代码随想录算法训练营第08天 | LeetCode 344.反转字符串,541. 反转字符串2,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串

    LeetCode [344. 反转字符串] 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...

  4. 字符串(一) | 剑指 Offer 58 - II. 左旋转字符串、541. 反转字符串 II、剑指 Offer 05. 替换空格、151. 反转字符串中的单词

    剑指 Offer 58 - II. 左旋转字符串 把前k个字符移动到结尾 翻转前k个字符,翻转剩余字符 翻转整个字符串 class Solution { public:void reverse(str ...

  5. 剑指 Offer 05. 替换空格【字符串】

    剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy." 输出 ...

  6. LeetCode 03: T58. 最后一个单词的长度(简单); 剑指 Offer 05. 替换空格(简单); 剑指 Offer 58 - II. 左旋转字符串(简单)

    文章目录 T7: 58. 最后一个单词的长度(简单) 思路 解法: 双指针 T8: 剑指 Offer 05. 替换空格(简单) 思路 解法: replace T9: 剑指 Offer 58 - II. ...

  7. 剑指Offer #02 替换空格(字符串处理)

    题目来源:牛客网-剑指Offer专题 题目地址:替换空格 题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之 ...

  8. java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...

    推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...

  9. 备战sp23春招 day8 | 344.反转字符串 541. 反转字符串II 剑指 05.替换空格 151.翻转字符串里的单词 剑指58-II.左旋转字符串

    344 反转字符串 class Solution {public:void reverseString(vector<char>& s) {int n = s.size();int ...

最新文章

  1. msf 之 webshell 提权
  2. Apache Kudu 1.9.0 发布,支持位置感知
  3. 详解Python中的下划线
  4. Pytorch基础(十)——优化器(SGD,Adagrad,RMSprop,Adam,LBFGS等)
  5. sublime每次打开时都提示升级,怎么取消这个弹出框?
  6. java button 背景色_以编程方式删除UIButton背景颜色
  7. 恢复系统管理员密码的五大奇招
  8. 栅栏密码怎么写java程序_[CTF]栅栏密码学习
  9. nios2 c语言编程方法nios2系列教程,nios2 c语言编程方法
  10. linux steam root,使用Lutris在Linux上安装Windows Steam
  11. flex android开发中关于请求报文技术操作问题
  12. 可长期免费使用的国产PLC录波软件(数据采集软件)PLC-Recorder V2.0版新功能
  13. 这18个网站能让你的页面背景炫酷起来
  14. 数据结构 Java数据结构 --- Lambda表达式
  15. Pro ASP.NET Core MVC(四)【C#关键特征】
  16. No suitable application records were found. Verify your bundle identifi
  17. 谷粒商城高级篇(36)——商品上架之上传数据到Elasticsearch
  18. opengl编程基础篇
  19. cad怎么将图层后置_CAD图层遮挡,如何将CAD图形进行前置或者后置?
  20. LoadRunner监控Oracle

热门文章

  1. RNA-seq 详细教程:搞定count归一化(5)
  2. 华为私有云的搭建方案_如何搭建私有云
  3. 如何解决Error while saving file: Unable to open database file问题
  4. Java反射获取构造方法
  5. 浏览器本地存储的方式~~~~~
  6. vs2013 应用程序无法正常启动
  7. Eclipse Android LogCat有时候显示不出输出的原因
  8. Linux 摸索:使用VM安装CenOS 7之后,开机启动黑屏
  9. 在安全创新的道路上飞奔
  10. YZ-9846时间同步装置 “四统一、四规范”,确保各时间同步设备时间高精度统一