我有这个字符串,例如:
"rome lucy blue"
我希望得到这个:
"emor ycul eulb"
使用Stack。
我只能以这种方式反转:
"eulb ycul emor"
按照代码:
public static String solution(String s) {
Deque<Character> stack = new ArrayDeque<>();
for (int i = 0; i < s.length(); i++) {
char chr = s.charAt(i);
stack.push(chr);
}
String output = "";
while (!stack.isEmpty()) {
char chr = stack.pop();
output = output + chr;
}
return output;
}
我尝试使用另一个循环,但结果相同。
答案 0 :(得分:1)
要保留代码,您可以这样做:
public static String solution(String s) {
String[] tab = s.split(" ");
Deque<Character> stack = new ArrayDeque<>();
String output = "";
//Iterate over the words of the sentence
for(String word : tab){
for (int i = 0; i < word.length(); i++) {
char chr = word.charAt(i);
stack.push(chr);
}
while (!stack.isEmpty()) {
char chr = stack.pop();
output += chr;
}
output+=" ";
}
return output;
}
我添加几行,只是将句子分成单词数组,然后你在每个单词上执行你的代码,不要忘记在每个单词之后进行转义而你&# 39;重新完成
答案 1 :(得分:1)
实施您在评论中所说的想法。对于字符串中的每个字符,如果它是一个空格弹出并将堆栈中的所有内容附加到结果中,否则将其推入堆栈。
public static String reverseWords(String str) {
StringBuilder res = new StringBuilder();
Deque<Character> stack = new ArrayDeque<>();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (Character.isSpaceChar(ch)) {
while (!stack.isEmpty()) res.append(stack.pop());
res.append(ch);
} else {
stack.push(ch);
}
}
// Handle anything left in the stack
while (!stack.isEmpty()) {
res.append(stack.pop());
}
return res.toString();
}
答案 2 :(得分:0)
最后,按照我的解决方案。
public static String solution(String s) {
String[] input1array = s.split(" ");
StringBuilder result = new StringBuilder();
for (int i = 0; i< input1array.length; i++ ){
StringBuilder rev = new StringBuilder(input1array[i]);
result.append(rev.reverse());
if(i != input1array.length - 1 ){
result.append(" ");
}
}
return result.toString();
}