力扣(LeetCode)翻转字符串里的单词 个人题解
2024-09-01 16:22:26
给定一个字符串,逐个翻转字符串中的每个单词。
示例 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;
}
};
最新文章
- SQL 存储过程优化经验
- Tomcat源码阅读(二)初始化
- JSP中request getParameter和getAttribute不同(转载)
- 服务器文件系统一定要用NTFS格式。
- android内存泄露小谈
- Properties读取资源文件的四种方法
- [置顶] 【VB.NET2010】注册表写入方法
- 《Programming WPF》翻译 目录
- ASP.NET aspx页面中 写C#脚本; ASP.NET 指令(<;%@%>;);
- PHP 判断是否包含在某个字符串中
- 纯命令提交代码到git仓库(教你怎么装逼)
- JVM 工作原理和流程
- Selenium IDE 基本概念
- iOS电量获取
- 在java.util中有EventListener接口:所有事件监听者都要实现这个接口。
- qrCode二维码字符串长度太多压缩的问题
- django model 条件过滤 queryset.filter(**condtions) 用法
- 《JAVA与模式》之桥梁模式
- CentOS下MySQL的彻底卸载
- Python之装饰器复习