如何通过堆栈按顺序反转String中的多个单词

时间:2017-02-09 23:38:08

标签: java algorithm stack

我有这个字符串,例如:

"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;
    }

我尝试使用另一个循环,但结果相同。

3 个答案:

答案 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();
    }