首页 > 其他分享 >剑指offer:翻转单词顺序列

剑指offer:翻转单词顺序列

时间:2022-12-01 19:01:26浏览次数:40  
标签:right string offer int 单词 ++ str left 翻转


题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

class Solution {
public:
string ReverseSentence(string str) {

int len = str.size();

if (len <=1){
return str;
}

int left = 0, right = len - 1;

reverseStr(str, left, right);

left = 0;
right = 0;
while(right <= len){

//“wonderful”这种情况,也就是处理最后一个词
if (right==len || str[right] == ' ' ){
reverseStr(str, left, right - 1);
right++;
left = right;
}
else{
right++;
}
}
return str;
}
private:
void reverseStr(string &str,int left,int right){
while (left < right){
swap(str[left], str[right]);
left++;
right--;
}
}

};

书上代码
可以发现C++中string是可以访问到size()这个位置的,而且值为’\0’

class Solution {
public:
string ReverseSentence(string str) {

int len = str.size();

if (len <=1){
return str;
}

int left = 0, right = len - 1;

reverseStr(str, left, right);

left = 0;
right = 0;
while(str[left]!= '\0'){

if (str[left] == ' '){
left++;
right++;
}
else if (str[right] == ' ' || str[right] == '\0'){
reverseStr(str, left, --right);
right++;
left = right;
}
else{
right++;
}
}

return str;
}
private:
void reverseStr(string &str,int left,int right){
while (left < right){
swap(str[left], str[right]);
left++;
right--;
}
}

};


标签:right,string,offer,int,单词,++,str,left,翻转
From: https://blog.51cto.com/u_15899184/5903627

相关文章

  • 剑指offer题解C++版
    一,常见数据结构1,数组3-找出数组中重复的数字4-二维数组中的查找5-替换空格29-顺时针打印矩阵leetcode989-数组形式的整数加法leetcode26-删除有序数组中的重复......
  • 代码随想录算法训练营Day15|102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉
    代码随想录算法训练营Day15|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树102.二叉树的层序遍历102.二叉树的层序遍历需要借用一个辅助数据结构即队列来......
  • 2022助我拿到9个Offer的成功秘籍?MySQL高级调优笔记 冲就完了
    第一部分:MySQL常用对象=================Linux安装MySQL及启动MySQL对象-索引MySQL对象-视图MySQL对象-存储过程MySQL对象-触发器第二部......
  • 简单列单词
    描述如果你计划读一本英语小说,可能你需要做一些提前准备,例如列出书中“常见的生词”。也许在以前,这是一件不可能的事。因为你既然没读过这本书,又怎么知道哪些是常见的......
  • 高级列单词
    描述现在给你一篇文章,请统计其中出现次数排名处于前n的单词,这里为了简单起见,所有非字母字符(包括空格、回车、标点、连字符"-"等等)都被认为是分隔单词的标志,换句话......
  • win10 git报错:Unable to negotiate with port: no matching host key type found. The
    现象已经生成id_rsa的密钥,并且在git上进行了配置。但是用gitclone失败。报错:Unabletonegotiatewithport:nomatchinghostkeytypefound.Theiroffer:ssh-rsa。......
  • 100道经典AI面试题帮你搞定算法offer!
    今天给大家分享一下关于机器学习与深度学习经典的100个面试题,供大家学习,对于面试AI算法岗一定会有帮助的。我的公众号"阿旭算法与机器学习",回复【AI面试题】,即可获取。......
  • 【剑指Offer】数据结构
    文章目录​​励志​​​​一、剑指Offer05.替换空格​​​​题:​​​​解:​​​​二、剑指Offer06.从尾到头打印链表​​​​题:​​​​解:​​​​三、剑指Offer09.......
  • 单词(Play On Words)
    【分析】      首先需对欧拉道路有所了解。    存在欧拉道路的充分条件:     对于无向图而言,如果一个无向图是连通的,且最多只有两个奇点(顶点的度数为奇......
  • 倒排单词
    输入:Iamastudent输出:studentaamI最简单的做法:#include<iostream>usingnamespacestd;intmain(){stringstr,res;while(cin>>str)res=str+''+res;c......