当前位置:首页 > 牛客题解 > 字符串反转的艺术:牛客网13278题深度解析

字符串反转的艺术:牛客网13278题深度解析

2天前牛客题解52

截图未命名.jpg 字符串反转的艺术:牛客网13278题深度解析 字符串反转 单词分割 算法优化 STL应用 边界条件处理 牛客网13278 第1张

问题描述

题目要求将一个英文句子中的单词顺序反转,同时保持每个单词内部的字符顺序不变。例如: 输入:"hello world" 输出:"world hello"

完整C++解决方案

#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>

using namespACe std;

string reverseSentence(string s) {
    // 去除首尾空格
    s.erase(0, s.find_first_not_of(" "));
    s.erase(s.find_last_not_of(" ") + 1);
    
    // 使用字符串流分割单词
    vector<string> words;
    stringstream ss(s);
    string word;
    while (ss >> word) {
        words.push_back(word);
    }
    
    // 反转单词顺序
    reverse(words.begin(), words.end());
    
    // 重新组合句子
    string result;
    for (int i = 0; i < words.size(); ++i) {
        if (i != 0) result += " ";
        result += words[i];
    }
    
    return result;
}

int main() {
    string line;
    while (getline(cin, line)) {
        cout << reverseSentence(line) << endl;
    }
    return 0;
}

关键技术点解析

  1. 字符串预处理:去除首尾空格确保处理准确性

  2. 单词分割技巧:使用stringstream自动处理连续空格

  3. 反转算法:STL的reverse函数高效反转容器元素

  4. 结果重组:注意单词间空格的正确插入

常见错误及调试技巧

  1. 空格处理不当:导致输出多余空格或缺少空格

  2. 边界条件遗漏:空字符串、全空格字符串等情况

  3. 效率问题:大规模数据时的性能优化

扩展练习建议

  1. 实现原地反转算法(不额外使用存储空间)

  2. 处理包含标点符号的句子

  3. 尝试不使用STL算法实现相同功能



原创内容 转载请注明出处

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。