[LeetCode] 186. Reverse Words in a String II 翻转字符串中的单词 II
Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters.
The input string does not contain leading or trailing spaces and the words are always separated by a single space.
For example,
Given s = "the sky is blue",
return "blue is sky the".
Could you do it in-place without allocating extra space?
151. Reverse Words in a String 一样,这里要求不能用额外空间,要用in-place完成。
该题假设开头和结尾没有空格,而且单词之间只有一个空格。不需要这些假设也是可以的,就是代码会比较复杂。
思路就是两步走,第一步就是将整个字符串翻转。然后从头逐步扫描,将每个遇到单词再翻转过来。
[注意事项]
1)如果是Java,应该跟面试官指出String是immutable,所以需要用char array来做。
2)follow-up问题:k-step reverse。也就是在第二部翻转的时候,把k个单词看作一个长单词,进行翻转。
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public void reverseWords( char [] s) { reverse(s, 0 , s.length); for ( int i= 0 , j= 0 ; j<=s.length; j++) { if (j==s.length || s[j]== ' ' ) { reverse(s, i, j); i = j + 1 ; } } } private void reverse( char [] s, int begin, int end) { for ( int i= 0 ; i<(end-begin)/ 2 ; i++) { char temp = s[begin+i]; s[begin+i] = s[end-i- 1 ]; s[end-i- 1 ] = temp; } } |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution( object ): def reverseWords( self , s): def reverse(s, begin, end): for i in xrange ((end - begin) / 2 ): s[begin + i], s[end - 1 - i] = s[end - 1 - i], s[begin + i] reverse(s, 0 , len (s)) i = 0 for j in xrange ( len (s) + 1 ): if j = = len (s) or s[j] = = ' ' : reverse(s, i, j) i = j + 1 |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class Solution { public : void reverseWords(string &s) { int left = 0; for ( int i = 0; i <= s.size(); ++i) { if (i == s.size() || s[i] == ' ' ) { reverse(s, left, i - 1); left = i + 1; } } reverse(s, 0, s.size() - 1); } void reverse(string &s, int left, int right) { while (left < right) { char t = s[left]; s[left] = s[right]; s[right] = t; ++left; --right; } } }; |
类似题目:
[LeetCode] 151. Reverse Words in a String 翻转字符串中的单词
[LeetCode] 557. Reverse Words in a String III 翻转字符串中的单词 III
All LeetCode Questions List 题目汇总
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构