0

「公開されたプログラミングのインタビュー」という本を読んでいて、次の質問は私にとって興味深いものでした。

文字列内の単語の順序を逆にする関数を作成します。たとえば、関数は文字列「Do or do not, there is no try.」を変換する必要があります。「やってみる。いいえ、ありません、するかするか」。すべての単語がスペースで区切られ、句読点を文字と同じように扱うと仮定します。

この画像は、アルゴリズムの設計を支援するために含まれています。

ここに画像の説明を入力

Javaでこれを実装する最も効率的な方法は何ですか?

4

6 に答える 6

5
final List<String> a = Arrays.asList("Do or do not, there is no try.".split("\\s+"));
Collections.reverse(a);
final Iterator<String> it = a.iterator();
final StringBuilder b = new StringBuilder(it.next());
while (it.hasNext()) { b.append(" "); b.append(it.next()); }
System.out.println(b);
于 2012-05-09T20:44:09.603 に答える
2

スペースに基づいて単語を分割します。単語をスタックに入れ、文字列の最後に到達したら単語をポップします。

 //push elements onto stack
 for(int k =0; k < strtest.length ; k++)
 {
      if(strtest[k]!=null)
      {
           stack.push(strtest[k]);
      }
 }
 StringBuffer b1 = new StringBuffer("");
 // pop and put in stringbuffer
 while(!stack.isEmpty())
 {
     b1 = b1.append(stack.pop());
     b1.append(" ");
 }
于 2012-05-09T21:30:02.250 に答える
1

まあ、これが宿題ではないことを願っていますが、これを行う1つの方法は次のとおりです。

String input = "piglet quantum";
String[] words = input.split(" ");
String result = "";
for(String word : words) {
  result = word + " " + result;
}
// This is to remove the extra space (sorry!)
result = result.substring(0, result.length() - 1);

ただし、これは画像で説明されている方法に厳密には準拠していません。substring()彼らはあなたに単語を配列として扱って欲しいので、おそらくあなたにこれを使って処理させてくれるでしょうcharAt()

于 2012-05-09T20:40:50.353 に答える
1

これを行うための非常に簡単な方法を次に示します。

String theInput = "Do or do not, there is no try.”;

String[] wordArray = theInput.split(" ");
String[] reverseWordArray = new String[wordArray.length];

int j = 0;
for (int i = wordArray.length; i > 0; i --) {
  reverseWordArray[j++] = wordArray[i-1];
}
于 2012-05-09T20:47:42.697 に答える
0

BreakIteratorもオプションです。

import java.text.BreakIterator;

public class ReverseWord {

    public static void main(String[] args) {
        String source = "piglet quantum";
        BreakIterator boundary = BreakIterator.getWordInstance();
        boundary.setText(source);
        int end = boundary.last();
        StringBuilder sb = new StringBuilder();
        for (int start = boundary.previous(); start != BreakIterator.DONE; end = start, start = boundary.previous()) {
            sb.append(source.substring(start, end));
        }
        String reversed = sb.toString();
        System.err.println("'" + reversed + "'");
    }
}

そしてそれは出力します:

「量子子豚」

于 2012-05-09T21:12:38.733 に答える
0

これは低(-er)レベルの方法です(私は思います):

String in = "piglet quantum";
String out = "";

for(int i = in.length()-1; i >= 0; i+=0) {
  out += in.substring(in.lastIndexOf(" ", i-1), i)+" ";
  i = in.lastIndexOf(" ", i-1);
}

out.substring(0, out.length()-1);

私が言ったように、これが機能するかどうかはわかりませんが、機能すると思います。

for誰かが提案を持っている場合、最後の条件をどうするかわかりません。それは何もするべきではありません。

于 2012-05-09T20:51:20.397 に答える