【问题标题】:How I can reverse multi words in a String by Stack keeping in order我如何通过堆栈保持顺序来反转字符串中的多个单词
【发布时间】:2017-02-09 23:38:08
【问题描述】:

我有这个字符串例如:

"rome lucy blue"

我想得到这个:

"emor ycul eulb" 

通过使用堆栈。

我只能通过这种方式反转:

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

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

【问题讨论】:

  • 好吧,你需要寻找空格。
  • @AndyTurner:啊,我遇到一个空格你建议做pop吗?
  • 我想你可以做到。

标签: java algorithm stack


【解决方案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】:

    要保留您的代码,您可以这样做:

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

    我添加了几行,只是将句子拆分为一个单词数组,然后你对每个单词进行你的代码,不要忘记在每个单词后面加上一个转义符,你就完成了

    【讨论】:

      【解决方案3】:

      最后,按照我的解决方案。

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

      【讨论】:

        猜你喜欢
        • 2015-11-22
        • 2013-01-19
        • 2021-11-25
        • 2010-11-03
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多