摘要:
简单栈的应用。
题目
描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述:
得到逆序的句子
示例1
输入:
I am a boy
输出:
boy a am I
栈
注意Java语言中,StringBuilder
的清空有三种常见的方式。
StringBuilder sb = new StringBuilder();
sb.setLength(0);
sb.delete(0. sb.length());
- 生成新的StringBuilder对象,旧的由GC回收。
三种方法最快的是第一种,第二种次之(差别很小),最慢的是第三种。
另外注意第二种方式,第二个index指向 StringBuilder
最后一个字符下标的后一位。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#include <bits/stdc++.h>
using namespace std;
stack<string> stk;
int main() { string s; getline(cin, s); s += ' '; string tmp = ""; for (int i = 0, n = s.size(); i < n; i ++) { if (s[i] == ' ') { stk.push(tmp); tmp = ""; } else { tmp += s[i]; } } for (; !stk.empty(); stk.pop()) { cout << stk.top() << " "; } return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
import java.util.*;
public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); s += " "; LinkedList<String> stk = new LinkedList<>(); char[] chs = s.toCharArray(); StringBuilder sb = new StringBuilder(); for (int i = 0, n = s.length(); i < n; i++) { if (chs[i] == ' ') { stk.addLast(sb.toString()); sb.setLength(0); } else { sb.append(chs[i]); } } for (; !stk.isEmpty();) { System.out.print(stk.removeLast() + " "); } } }
|