LeetCode--151. 翻转字符串里的单词(字符串翻转,字符串分割)
翻转字符串里的单词(双指针,字符串分割)
- 1. 题目描述
- 2. 题目分析
- 3. C语言实现
- 4. Python实现
1. 题目描述
难度:中等
2. 题目分析
这道题我们需要注意的点有以下几个:
- 每个单词之间都要有一个并且仅有一个空格
- 翻转之后的字符串首尾两端要去电空格
- 使用O(1)的空间
只使用O(1)的额外空间的话,只能在原数组上进行转换:
- 字符串翻转法(C)
利用双指针对对字符串进行整体翻转,如果对输入“the sky is blue” 翻转之后为“eulb si yks eht”。之后在对每个单词进行反转,结果为“blue is sky the”,就完成了。在翻转的时候对多余的空格进行去除即可。 - 字符串分割法(Python)
字符串的题目利用python是很方便的,可以先对字符串进行分割,然后在反转合成新的字符串即可。
3. C语言实现
代码如下:
// 去除指定位置的yuansu
char * removeSpaces(char *s, int index){int len = strlen(s);for(int i = index; i < len-1; i++){s[i] = s[i+1];}s[len-1] = '\0';return s;
}
char * reverseWords(char * s){int len = strlen(s);if(len == 0) return s;if(len == 1) return s[0]==' '? "":s;int left=0, right=len-1, index, count = 0;char temp;// 去除字符串两边的空格while(s[right] == ' '){right--;if(right == -1) return "";}while(s[left] == ' '){left++;}for(int i = 0; i <= right-left; i++){s[i] = s[i+left];}s[right-left+1] = '\0';len = strlen(s);left = 0;right = len -1;// 翻转整个字符串while(left < right){temp = s[left];s[left] = s[right];s[right] = temp;left++;right--;}// 去除中间多余的空格for(int i = 0; i < len; i++){if(s[i] == ' '){if(count > 0){s = removeSpaces(s, i);len = strlen(s);i--;}else count++;}else count = 0;}// 转换每个单词left = 0;right = 0;for(int i = 0; i < len; i++){if(s[i] == ' ' || i == len-1){right = i==len-1?i:i-1;while(left < right){temp = s[left];s[left] = s[right];s[right] = temp;left++;right--;}left = i+1;}}return s;}
运行结果为:
4. Python实现
代码如下:
class Solution:def reverseWords(self, s: str) -> str:# 分割字符串tem = s.split(' ')res = ''# 去除tem 中的空元素while '' in tem :tem .remove('')# 合成新的字符串for i in range(len(tem )):res = res + tem [len(tem )-1-i] + ' 'return res [:-1]
运行结果为:
LeetCode--151. 翻转字符串里的单词(字符串翻转,字符串分割)相关推荐
- Day8——反转字符串、反转字符串||、替换空格、反转字符串里的单词、左旋字符串
今天是算法训练的第八天. 目录 前言 一.反转字符串 解题思路: 二.反转字符串|| 题目描述: 解题思路: 三.替换空格 解题思路: 四.反转字符串中的单词 解题思路: 五.左旋转字符串 解题思路: ...
- python【力扣LeetCode算法题库】151- 翻转字符串里的单词
翻转字符串里的单词 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky the&quo ...
- 反转字符串里的单词 + 图示
翻转字符串里的单词 给定一个字符串,逐个翻转字符串中的每个单词. 说明: 无空格字符构成一个 单词 . 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括. 如果两个单词间有多余的空 ...
- [leetcode]151.翻转字符串里的单词
给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔开. 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串. ...
- 数组翻转_LeetCode刷题实战151:翻转字符串里的单词
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊 ...
- 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列
72.编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 .你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符. ...
- 代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符
一.344.反转字符串 力扣 思路:很简单的一个for循环双指针,left和right交换. class Solution {public void reverseString(char[] s) { ...
- 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串
一.344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的 ...
- Lc151翻转字符串里的单词
翻转字符串里的单词 差一点就做出来,一开始用空格拆分单词,但是这个样例the sky is blue 没有通过,单词之间有多个空格的情况,然后看了评论区--学了一个正则表达式 /\s+/这是正则表达式 ...
最新文章
- 2014年第五届蓝桥杯决赛Java本科B组试题解析
- 小红书做直播的背后,隐藏了什么秘密?
- 归一化激活层的进化:谷歌Quoc Le等人利用AutoML 技术发现新型ML模块
- 考前自学系列·计算机组成原理·IEEE 754 单精度浮点数和真值之间的转化
- MyEclipse开发教程:使用REST Web Services管理JPA实体(四)
- 找出得分最高的无重复子段
- android录音播放列表,android数据库里的视频,图片,音频表
- 最优化学习笔记(五)——牛顿法(多维数据)
- python高级-------python2.7教程学习【廖雪峰版】(四)
- python的while嵌套循环_Python中嵌套的WHILE循环
- 微信小程序点餐系统需求分析与建模
- Xamarin教程索引页
- 四川山海蓝图抖音上热门的技巧
- Java每日一题——>739. 每日温度(蛮力法,栈方法)
- C++求一元二次方程根
- python毕业设计作品基于django框架 景区购票系统毕设成品(4)开题报告
- DOS的建文件夹,移动图片,多级文件夹建立
- HTML识别文本空格回车换行展示
- 2021-05-12 MongoDB面试题 简单的描述下MongoDB选举流程
- 03_JavaScript常见运算符
热门文章
- linux zip包解压乱码
- php千封邮件怎么快速发送,如何在PHP中无限制地发送数千封电子邮件?
- java文件不能转class_安了jdk 却不能将.java文件转换成.class 文件,一运行就说‘javac’不是内部或外部指令,却能运行.class文...
- Spring-自定义类实现AOP(八)
- Win32中常用消息
- python--线性回归
- xcodebuild构建时报错unknown error -1=ffffffffffffffff Command /bin/sh failed with exit code 1
- GO学习笔记 - Go 只有一种循环结构—— for 循环。
- java必会的英语单词
- 简单的ios网络数据交互