摘要:说明无空格字符构成一个单词。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。我们将字符串转为字符型数组并用两个指针来解这道题。指针作为原字符串转为字符数组的索引,从右向左移。
公众号:爱写bug(ID:icodebugs)
翻转字符串里的单词
Given an input string, reverse the string word by word.
示例 1:
输入: "the sky is blue" 输出: "blue is sky the"
示例 2:
输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example" 输出: "example good a" 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
进阶:
请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。
Note:
A word is defined as a sequence of non-space characters.
Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
You need to reduce multiple spaces between two words to a single space in the reversed string.
Follow up:
For C programmers, try to solve it in-place in O(1) extra space.
解题思路:Java 字符串不支持运算符重载,无法用原地解法。 我们将字符串转为字符型数组并用两个指针来解这道题。指针 i 作为原字符串转为字符数组的索引,从右向左移。指针 j 作为新字符数组索引,从左向右赋值得到原数组 count 长度的字符。count记录遇到的字母数量,每次遇到 空格 字符,新数组得到从该空格字符 向右 count 个字符并刷新count 计数。
Java:class Solution { public String reverseWords(String s) { if (s.length()==0)return s;//如果为空直接返回 char strs[]=s.toCharArray(),ans[]=new char[s.length()];//字符串转为char字符数组 int count=0,j=0;//全局变量j记录新数组索引 for(int i=s.length()-1;i>=0;i--){指针i从右向左遍历strs字符 if(strs[i]==" "){//判断是否为空格字符 int k=i+1; if(count>0){ while (--count>=0){//从字符i向右count个字符赋给新数组ans ans[j++]=strs[k++]; } ans[j++]=" "; count=0;//count初始化为0 } }else if(i==0){ for(;i<=count;i++)ans[j++]=strs[i];//左移到第一个字符时证明不是以空格开头,则从0获取count+1个个字符赋给ans j+=1; break; } else { count++;//如果是字母,则count累加1 } } if(j<1)return "";//如果j依然是0,则原字符串全为空格,返回空字符串 String string=String.valueOf(ans,0,j-1);//char数组转为字符串返回 return string; } }
为了考虑性能,转成了多个判断,所以有些繁琐。最终运行:Your runtime beats 99.91 % of java submissions
Python3:python完全可以实现Java的思路,不再复现。这里利用函数投机取巧:
split() ,它可以把传入字符串剔除空格后返回 所有单词的数组
join() ,它可以指定一个数组以特定字符为间隔,拼接成一个字符串
加上 [::-1] 反转数组,一行代码既可实现该题目要求
" abc def " 原字符串["abc" , "def"] 剔除空格返回String型单词数组
["def" , "abc"] 切片反转数组
"def abc" 拼接成字符串
class Solution: def reverseWords(self, s: str) -> str: return " ".join(s.split()[::-1]) # 剔除所有空格字符返回数组并反转,以空格为间隔把数组拼成字符串
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/45147.html
摘要:说明无空格字符构成一个单词。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。我们将字符串转为字符型数组并用两个指针来解这道题。指针作为原字符串转为字符数组的索引,从右向左移。 公众号:爱写bug(ID:icodebugs) 翻转字符串里的单词 Given an input string, reverse the string word by word. 示例 1:...
摘要:小鹿题目翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每个单词。说明无空格字符构成一个单词。遇到空格之后,将单词进行倒序拼接。消除尾部的空格。测试用例空字符串。中间空格大于的字符串。 Time:2019/4/20Title: Reverse Words In a StringDifficulty: MidumnAuthor: 小鹿 题目:Reverse Words In a ...
摘要:思路先用将字符串分割,再遍历,将字符串内每个单词进行翻转代码题意给定一个字符串,将字符串按照翻转,不翻转的规则进行处理。思路先将字符串分段,然后再根据段落进行处理最后将字符串输出。 344 Reverse String题意:给出一个字符串对字符串进行翻转(reverse)思路:直接使用切片函数进行翻转(网上看到的,具体怎么使用有点迷)[::-1]代码:`class Solution(...
摘要:题目要求讲一个字符串中的单词逆序输出,单词中字母顺序不发生改变。其中,字符串首位的空格应删去,字符串中如果存在多余的空格,只需输出一个空格。这里用到的正则表达式为也就是遇到一个或多个空白时断句。 题目要求 Given an input string, reverse the string word by word. For example, Given s = the sky is ...
摘要:一题目描述空格分隔,逐个反转二题目描述三题目描述当然也可以用的做,不过用双指针更快。 LeetCode: 557. Reverse Words in a String III 一、LeetCode: 557. Reverse Words in a String III 题目描述 Given a string, you need to reverse the order of chara...
阅读 991·2023-04-25 14:20
阅读 1867·2021-11-24 10:20
阅读 3763·2021-11-11 16:55
阅读 2904·2021-10-14 09:42
阅读 3465·2019-08-30 15:56
阅读 1141·2019-08-30 15:55
阅读 1063·2019-08-30 15:44
阅读 770·2019-08-29 11:28