-
Notifications
You must be signed in to change notification settings - Fork 11
/
ReverseWordsInSentence.java
59 lines (47 loc) · 1.49 KB
/
ReverseWordsInSentence.java
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*翻转字符串: 思路 :双指针解法 栈法*/
import java.util.Stack;
public class ReverseWordsInSentence {
public String reverseWords(String s){
// 删除首尾空格
s = s.trim();
int j = s.length()-1;
int i = j;
StringBuilder res = new StringBuilder();
while (i>=0){
// 倒叙查找 第一个空格
while (i>=0&&s.charAt(i)!=' ') i--;
// 找到第一个空格 截取字符串
res.append(s.substring(i+1,j+1)+' ');
// 跳过单词空格
while (i>=0 &&s.charAt(i)==' ') i--;
j = i;
}
return res.toString().trim();
}
}
//栈法
class ReverseWordsInSentenceStack{
public String reverseWords(String s){
// stack<char> word = new
s = s.trim();
Stack<Character> word = new Stack<Character>();
StringBuilder res = new StringBuilder();
for (int i = s.length()-1; i>=0 ; --i) {
if (s.charAt(i) != ' '){
word.push(s.charAt(i));
}
// 单词出栈
if (s.charAt(i)==' '||i==0){
boolean flag = false; //标记是否发生出栈
while (!word.isEmpty()){
res.append(word.pop());
flag = true;
}
if (flag){
res.append(' ');
}
}
}
return res.toString().trim();
}
}