解题思路
这是一道字符串处理题目,主要思路如下:
-
问题分析:
- 输入一个只包含字母和空格的句子
- 单词之间用一个空格分隔
- 句子前后没有空格
- 需要将单词顺序反转
-
解决方案:
- 从后向前遍历字符串
- 遇到空格时输出后面的单词
- 最后输出第一个单词
-
实现细节:
- 使用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()
算法及复杂度
- 算法:字符串处理
- 时间复杂度:
-
为字符串长度
- 空间复杂度:
- 只需要常数空间