给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:

输入: "the sky is blue"
输出: "blue is sky the"

示例 2:

输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:

输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

说明:

  • 无空格字符构成一个单词。
  • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
  • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

进阶:

请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。

哈,拿到这题思维定势准备拿split做,然后发现世界上最好的语言——C++的标准库里并没有split的函数,于是费尽千辛万苦实现了一番C++版的split函数,然后老套路,倒序输出。

后由于用时过长,查看了提交区的大佬做法,基本的思路是将字符串翻转一遍后,再判断单词的界限再单独翻转单词,这样就满足了原地解法了。

代码如下:

class Solution {
public:
string reverseWords(string s) {
vector<string> get = split(s);
string ans="";
reverse(get.begin(),get.end());
for(string ss :get) {
ans=ans+ss+" ";
}
return ans.substr(,ans.size()-);
} vector<string> split(string s) {
string tmp="";
vector<string> ans;
for(int i=; i<s.size(); i++) {
char c=s[i];
if (c!=' ') {
tmp+=c;
} else {
if (tmp!="") {
ans.push_back(tmp);
tmp="";
}
}
}
if (tmp!="")
ans.push_back(tmp);
return ans;
}
};

以下为摘抄自提交区的大佬代码:

/*
先把每个词反转,再把整体反转
这个过程中需要:
去掉字符串开头和结尾的空格
去掉字符串中间多余的空格
*/
class Solution {
public:
void reverse(string& s,int left,int right){
int tmp;
while(left<right){
tmp=s[left];
s[left]=s[right];
s[right]=tmp;
++left;
--right;
}
}
string reverseWords(string s) {
if(s.size()==) return s;
int j=;
while(s[j]==' '){
s.erase(j,);
}
j=s.size()-;
while(s[j]==' '){
s.erase(j,);
j=s.size()-;
}
int i=;
while(i<s.size()){
if(s[i]==' '){
while(i+<s.size()&&s[i+]==' '){
s.erase(i+,);
}
++i;
}else{
int k=;
while(i+k<s.size()&&s[i+k]!=' '){
k++;
}
reverse(s,i,i+k-);
i=i+k; }
}
reverse(s,,s.size()-);
return s;
}
};

最新文章

  1. SQL 存储过程优化经验
  2. Tomcat源码阅读(二)初始化
  3. JSP中request getParameter和getAttribute不同(转载)
  4. 服务器文件系统一定要用NTFS格式。
  5. android内存泄露小谈
  6. Properties读取资源文件的四种方法
  7. [置顶] 【VB.NET2010】注册表写入方法
  8. 《Programming WPF》翻译 目录
  9. ASP.NET aspx页面中 写C#脚本; ASP.NET 指令(&lt;%@%&gt;);
  10. PHP 判断是否包含在某个字符串中
  11. 纯命令提交代码到git仓库(教你怎么装逼)
  12. JVM 工作原理和流程
  13. Selenium IDE 基本概念
  14. iOS电量获取
  15. 在java.util中有EventListener接口:所有事件监听者都要实现这个接口。
  16. qrCode二维码字符串长度太多压缩的问题
  17. django model 条件过滤 queryset.filter(**condtions) 用法
  18. 《JAVA与模式》之桥梁模式
  19. CentOS下MySQL的彻底卸载
  20. Python之装饰器复习

热门文章

  1. std::is_same
  2. xshell rz commend not found
  3. HDFS基本命令与Hadoop MapReduce程序的执行
  4. Unity调用Android
  5. 网络数据请求request
  6. Spring之Zuul初步使用(十)
  7. 详细讲解CSS中相对定位relative和绝对定位absolute
  8. python 线程、进程与协程
  9. DataGridView内容居中显示
  10. 《Effective Java》 读书笔记(四) 使用私有构造方法执行非实例化