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

网易数帆陈谔:云原生“牵手”低代码,加速企业数字化转型

ldap创建公司组织、人员

一个循环,两个循环问题的思考及复现

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

initramfs详解----设备文件系统

JVM internal structure and various modules operation mechanism

DJI内推码(2022年8月2日更新)

Brute force recursion to dynamic programming 07 (516. Longest palindrome subsequence)

【云原生】灰度发布、蓝绿发布、滚动发布、灰度发布解释

工作两年成跳槽高峰期,程序员会在一家公司待多久?
随机推荐
堆的应用:堆排序和TOP-K问题
Kubernetes:(八)调度约束和故障排查
Summary of some interviews
PHICOMM(斐讯)N1盒子 - Armbian5.77(Debian 9)基本配置
The LVS load balancing cluster and the deployment of the LVS - NAT experiment
Brute force recursion to dynamic programming 07 (516. Longest palindrome subsequence)
常见钓鱼手法及防范
面试题整理1
How does Excel compare if two columns of strings are the same?
通过kubernetes可视化界面(rancher)安装kibana
apache-activemq-5.14.1
initramfs详解-----初识initramfs
The cornerstone of high concurrency: multithreading, daemon threading, thread safety, thread synchronization, mutual exclusion lock, all in one article!...
lombok 下的@Builder和@EqualsAndHashCode(callSuper = true)注解
46LVS+Keepalived群集
网易数帆陈谔:云原生“牵手”低代码,加速企业数字化转型
国标GB28181协议EasyGBS平台项目现场通知消息过多导致系统卡顿该如何解决?
能添加任意贴图超级复布局的初级智能文本提示器
[Arduino] Reborn Arduino Monk (3)----Arduino function
Topic Modeling of Short Texts: A Pseudo-Document View