当前位置:网站首页>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;
}
};
边栏推荐
猜你喜欢

QWidget、QPushButton、

WordPress博客问答小插件

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

孩子坐不住就是不专注?猿辅导揭秘专注力的三大误区

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

The LVS load balancing cluster and the deployment of the LVS - NAT experiment

易购数码类电商商城网页设计与实现项目源码

【云原生】服务行业案例-不可预测的并发场景解决方案

Excel 如何比较两列字符串是否相同?

征集 |《新程序员》专访“Apache之父”Brian Behlendorf,你最想问什么?
随机推荐
radio button、qss文件环境配置
YYGH-BUG-06
易购数码类电商商城网页设计与实现项目源码
复杂多层布局的初级智能文本提示器
关于提高企业网络安全意识
LVS负载均衡群集及部署LVS-NAT实验
Mysql-如何进行慢SQL查询
会话技术!
[QNX Hypervisor 2.2用户手册]10 虚拟设备参考
JVM内部结构图及各模块运行机制总结
Excel 如何比较两列字符串是否相同?
网易数帆陈谔:云原生“牵手”低代码,加速企业数字化转型
如何准备考pmp?
Shell脚本乘法口诀等小实验
代码工具推荐
SPI机制是什么?
vs studio 安装opencv 环境
【Flink】使用arthas在线诊断flink的那些事
IDEA基本使用-创建和删除项目
QCheckBox、margin、border、pandding、QHoxLayout、QSplitter、QSpacerItem