• 剑指offer(C++)-JZ73:翻转单词序列(数据结构-队列 & 栈)


    作者:翟天保Steven
    版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

    题目描述:

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

    数据范围:1≤n≤100 
    进阶:空间复杂度 O(n)  ,时间复杂度 O(n)  ,保证没有只包含空格的字符串

    示例:

    输入:

    "nowcoder. a am I"
    

    返回值:

    "I am a nowcoder."

    解题思路:

    本题考察数据结构队列 & 栈的使用。两种解法:

    1)利用栈先进后出特性。遍历字符串,拆分各个子串放入栈;遍历栈,依次弹出。注意除了最后一个子串,其他的子串都要带一个空格。

    2)利用STL库reverse翻转函数。先整体翻转一次,再遍历确定各个子串,对子串进行二次翻转。

    测试代码:

    解法一:栈

    1. class Solution {
    2. public:
    3. string ReverseSentence(string str) {
    4. string result;
    5. int len=str.length();
    6. // 使用栈:先进后出
    7. // 依次放入
    8. stack<string> s;
    9. for(int i=0;i
    10. {
    11. int j=i;
    12. // 寻找空格位置
    13. while(j' ')
    14. j++;
    15. // 将子串放入栈
    16. string ss=str.substr(i,j-i);
    17. s.push(ss);
    18. i=j;
    19. }
    20. // 栈依次弹出
    21. int size=s.size();
    22. for(int i=0;i
    23. {
    24. result+=s.top();
    25. // 最后一个子串不加空格
    26. if(i!=(size-1))
    27. result+=" ";
    28. s.pop();
    29. }
    30. return result;
    31. }
    32. };

    解法二:reverse翻转

    1. class Solution {
    2. public:
    3. string ReverseSentence(string str) {
    4. int len = str.length();
    5. // 先整体反转
    6. reverse(str.begin(), str.end());
    7. // 各个子串再次翻转
    8. for(int i = 0; i < len; ++i)
    9. {
    10. int j = i;
    11. //以空格为界找到一个单词
    12. while(j < len && str[j] != ' ')
    13. j++;
    14. //将这个子串翻转
    15. reverse(str.begin() + i, str.begin() + j);
    16. i = j;
    17. }
    18. return str;
    19. }
    20. };

    祝大家情人节快乐!

  • 相关阅读:
    c语言刷题第10周(16~20)
    2023年【北京市安全员-B证】考试试卷及北京市安全员-B证模拟考试题
    基于大数据的安防体系建设研究和实践
    C++ - 8月31日 - 约瑟夫环问题
    【HTML】form标签
    JS数组转为字符串如何实现?
    vuejs编译器的目的是什么?
    E. Hanging Hearts #831 div1+2
    【状态估计】基于FOMIAUKF、分数阶模块、模型估计、多新息系数的电池SOC估计研究(Matlab代码实现)
    DC-DC——同步和异步的区别
  • 原文地址:https://blog.csdn.net/zhaitianbao/article/details/126152547