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

工作两年成跳槽高峰期,程序员会在一家公司待多久?

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

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

软件定义网络实验之自定义拓扑开发

复杂多层布局的初级智能文本提示器

【UE4】Build VR live broadcast in LAN UE4.27

236. The binary tree in recent common ancestor

Wireshark data capture and analysis of the transport layer protocol (TCP protocol)

Topic Modeling of Short Texts: A Pseudo-Document View

Wei Dongshan Digital Photo Frame Project Learning (5) Transplantation of libjpeg-turbo
随机推荐
WordPress博客问答小插件
程序员写代码日常 | 每日趣闻
复杂多层布局的初级智能文本提示器
sql注入是什么意思以及防止sql注入?
自定义RunTimeException工具类
Fiddler基本使用
Rust Web(三)—— 通过sqlx连接数据库(MySQL)
流程图(1)
常见钓鱼手法及防范
initramfs详解-----初识initramfs
【UE4】搭建局域网内VR直播 UE4.27
【UE4】Build VR live broadcast in LAN UE4.27
扩展卡尔曼滤波【转】
The Sandbox 市场平台将上线 Isla Obscura 第五期 NFT 作品集
【Arduino】重生之Arduino 学僧(3)----Arduino函数
什么情况下DigiCert证书会引起发生安全警报?
软件定义网络实验之自定义拓扑开发
Topic Modeling of Short Texts: A Pseudo-Document View
ROS通信模块:秒懂话题通信
有趣简单的M2处理器性能实验:Swift与C代码执行速度的比较