当前位置:网站首页>leetcode:151. 颠倒字符串中的单词
leetcode:151. 颠倒字符串中的单词
2022-08-03 02:04:00 【OceanStar的学习笔记】
题目来源
题目描述


题目解析
进阶要求(原地 解法)
不能使用辅助空间之后,那么只能在原字符串上下功夫了。
思路:源字符串为:"the sky is blue "
- 移除多余空格:“the sky is blue”
- 字符串反转:“eulb si yks eht”
- 单词反转:“blue is sky the”

class Solution {
public:
//反转字符串
void reverse(string& s,int start,int end){
while(start<end){
swap(s[start++],s[end--]);
}
}
//移除多余空格,利用快慢指针
void removeExtraSpaces(string&s){
int slow=0,fast=0;
//移除开始位置的空格
while(s[fast]==' '){
fast++;
}
//移除中间位置多余的空格
while(fast<s.size()){
if(fast>0 && s[fast]==' ' &&s[fast-1]==' '){
fast++;
}
else{
s[slow]=s[fast];
slow++;
fast++;
}
}
//如果末尾仅有一个空格,则上述无法将该空格移除;如果末尾有很多空格,则上述将保留一个空格,也不符合要求;所以最终可能的情况有二:末尾有一个空格/末尾无空格
if(slow-1>0 && s[slow-1]==' '){
slow--;
}
s.resize(slow);
}
string reverseWords(string s) {
//step1.移除多余空格
removeExtraSpaces(s);
//step2.反转整个字符串
reverse(s,0,s.size()-1);
//step3.依次反转每个单词
int start=0;
for(int i=0;i<s.size();i++){
if(s[i]==' '){
reverse(s,start,i-1);
start=i+1;
}
if(i==s.size()-1){
reverse(s,start,i);
}
}
return s;
}
}
API
class Solution {
public:
string reverseWords(string s) {
istringstream sin(s);
string ans, word;
while(sin>>word){
ans = " " + word + ans;
}
return ans.substr(1, ans.size()-1);
}
};
一次遍历(辅助空间)
class Solution {
public:
string reverseWords(string s) {
if(s.empty()){
return "";
}
int L = 0, R = s.size() - 1;
std::string ans;
while (L <= R){
while (L <= R && s[L] == ' '){
L++;
}
int start = L;
while (L <= R && s[L] != ' '){
L++;
}
int len = L - start; // 'a '
if(len != 0){
std::string tmp = s.substr(start, len);
ans = ans.empty() ? tmp : tmp + " " + ans;
}
}
return ans;
}
};
边栏推荐
- 韦东山 数码相框 项目学习(五)libjpeg-turbo的移植
- Wei Dongshan Digital Photo Frame Project Learning (5) Transplantation of libjpeg-turbo
- 复杂多层布局的初级智能文本提示器
- 实现统一账号登录,sonarqube集成ldap
- 国标GB28181协议EasyGBS平台项目现场通知消息过多导致系统卡顿该如何解决?
- 什么样的存储服务,才能成为企业数字化创新“加速器”?
- 可信的SSL证书颁发机构有哪些
- Brute force recursion to dynamic programming 07 (516. Longest palindrome subsequence)
- 如何准备考pmp?
- Kook机器人开发日志01
猜你喜欢

.NET in-depth analysis of the LINQ framework (four: IQueryable, IQueryProvider interface details)

南瓜科学新品上线 开辟益智玩具新世界

【云原生】阿里云ARMS业务实时监控

5. Software testing ----- automated testing

【UE4】搭建局域网内VR直播 UE4.27

什么情况下DigiCert证书会引起发生安全警报?

问题记录:jenkins构建时报错The goal you specified requires a project to execute but there is no POM in...

豆瓣评分9.3的好书,文末给大家抽奖送几本!

Incorrect datetime value: ‘2022-01-01‘ for function str_to_date

一些面试的总结
随机推荐
monkey 压测
流程图(1)
服务器在线测速系统源码
常见钓鱼手法及防范
PHICOMM(斐讯)N1盒子 - recovery模式救砖卡登录页LOGO卡1%卡4%卡26%
EasyGBS播放器优化:设备通道视频播放出现跳屏问题的修复
简单的布局的初级智能文本提示器
openCV第一篇
韦东山 数码相框 项目学习(五)libjpeg-turbo的移植
可信的SSL证书颁发机构有哪些
Usage of permute() function in pytorch
公司封装方式导出excel过程
HCIP第十二天_二层MPLS实验
LabVIEW程序框图保存为图像
Summary of some interviews
孩子坐不住就是不专注?猿辅导揭秘专注力的三大误区
JVM internal structure and various modules operation mechanism
粘包与拆包
Incorrect datetime value: '2022-01-01' for function str_to_date
Shell脚本乘法口诀等小实验