2017-02-09 11 views
0

У меня есть эта строка, например:Как я могу изменить мульти слова в строке по Stack поддержание порядка

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

Я пытался использовать еще один цикл, но у меня есть один и тот же результат.

+0

Ну, вам нужно искать пробелы. –

+2

@ AndyTurner: ах, вы предлагаете делать поп, когда я встречаю одно пространство? – Clash

+0

Я полагаю, вы могли бы это сделать. –

ответ

0

Чтобы реализовать идею, которую вы сказали в комментарии. Для каждого символа в строке, если это пробел и добавьте все в стек к результату, в противном случае нажмите его в стек.

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

добавить несколько строк, просто разделить предложение в слове массив, а затем вы делаете ваш код на каждое слове, дон Не забыл сбежать после каждого, и вы закончили

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