解题思路

这是一道字符串处理题目,主要思路如下:

  1. 问题分析:

    • 输入一个只包含字母和空格的句子
    • 单词之间用一个空格分隔
    • 句子前后没有空格
    • 需要将单词顺序反转
  2. 解决方案:

    • 从后向前遍历字符串
    • 遇到空格时输出后面的单词
    • 最后输出第一个单词
  3. 实现细节:

    • 使用substr函数截取单词
    • 记录上一个空格位置
    • 处理最后一个单词

代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    while(getline(cin, str)) {
        // 从后向前遍历
        int pos = str.length() - 1;
        for(int i = pos; i > 0; i--) {
            // 遇到空格时输出后面的单词
            if(str[i] == ' ') {
                cout << str.substr(i + 1, pos - i) << ' ';
                pos = i - 1;
            }
        }
        // 输出第一个单词
        cout << str.substr(0, pos + 1) << endl;
    }
    return 0;
}
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()) {
            String str = sc.nextLine();
            // 分割字符串
            String[] words = str.split(" ");
            // 反向输出
            for(int i = words.length - 1; i > 0; i--) {
                System.out.print(words[i] + " ");
            }
            // 输出第一个单词
            System.out.println(words[0]);
        }
    }
}
def reverse_words(s: str) -> str:
    # 分割成单词列表并反转
    words = s.split()
    words.reverse()
    # 用空格连接
    return ' '.join(words)

def main():
    while True:
        try:
            s = input()
            print(reverse_words(s))
        except EOFError:
            break

if __name__ == "__main__":
    main()

算法及复杂度

  • 算法:字符串处理
  • 时间复杂度: - 为字符串长度
  • 空间复杂度: - 只需要常数空间