3

プログラムに文字列を挿入しています

String str = " I live in India"; 

そのような逆文字列を取得するにはどうすればよいですか

String str ="India in live I"

これは私のインタビューでのインタビューの質問です. 誰でもこの質問で私を助けてください

4

3 に答える 3

18

Stringそれを分割してから、逆の順序で新しいものに追加します。

String s = " I live in India";
String[] split = s.split(" ");
String result = "";
for (int i = split.length - 1; i >= 0; i--) {
  result += (split[i] + " ");
}
System.out.println(result.trim());

これは以下を出力します:

India in live I

短くて簡単ですが、このソリューションは時間とメモリの点であまり効果的ではありません。Stringそれは、入力がどのように与えられるか (または他のものとして)、および計算リソースを節約するために入力を変更できるかどうかに多少依存します。

文が文字の配列として与えられ、それを変更できると仮定しましょう。O(n)次に、線形時間 ( ) と定数 ( O(1)) のメモリの複雑さをもたらす次のアプローチに従うことができます。

入力として得られるものは次のとおりです。

char[] array = {'I',' ','l','i','v','e',' ','i','n',' ','I','n','d','i','a'};

char[]配列を取り、要素を元startend場所に戻すメソッドを書きましょう。

void reverse(char[] array, int start, int end) {
  while (start < end) {
    char temp = array[start];
    array[start] = array[end];
    array[end] = temp;
    start++;
    end--;
  }
}

まず、このメソッドを使用して、配列全体を (インプレースで) 反転します。反転後、文中の単語が目的の (反転した) 順序になっていることがわかります。問題は、各単語が逆になっていることです。

{'a','i','d','n','I',' ','n','i',' ','e','v','i','l',' ','I'}

配列を左から右に繰り返します。最初に配列全体を逆にしたように、各単語をその場で逆にします。そのためには、単語の開始位置を示すインデックス ( ) を保持する必要がありstart、スペース ( ) に遭遇するたびに、 とスペースの前の文字との' '間の反転をトリガーします。startこのようにして、単語の望ましい順序を維持しますが、単語内の文字も適切に並べられます。

コードは自明である必要があります。

void reverseSentence(char[] array) {
  int n = array.length;
  reverse(array, 0, n - 1);
  int start = 0;
  for (int i = 0; i < n; i++) {
    if (array[i] == ' ') {
      reverse(array, start, i - 1);
      start = i + 1;
    }
  }
}

これを initialarrayで呼び出すと、次のようになります。

{'I','n','d','i','a',' ','i','n',' ','l','i','v','e', ' ','I'}

それをさらに構築するStringか、単に印刷することができます。いずれにせよ、文は必要に応じて反転されます。

これは線形複雑性 ( O(n)) を持ちます。これは、各文字が 1 回だけ反転の一部であり、スペースであるかどうかが 1 回だけテストされているためです。

メモリ使用量に関しては、1 つの追加変数 ( start) のみを使用しました。これにより、合計メモリの複雑さが定数 ( O(1)) になります。

于 2013-09-13T09:17:38.920 に答える
2
String str = "I live in India";
String result = "";
String[] words = str.split(" ");
for (int i=words.length-1;i>=0;i--){
    result = result + words[i] + " ";
}
result = result.subString(result, 0, result.length-1); // remove the last " "

このコードは文字列を空白に沿って分割し、単語の配列を取得します。次に、for ループが最後の要素から最初の要素まで配列を反復処理し、結果の文字列に単語と空白を追加します。最後に、最後の単語の後の空白が削除されます。

于 2013-09-13T09:21:41.343 に答える
-1

この方法を試してください

public class test {
    public static void main(String args[])
    {

        String x="i live in india";
        String y[]=x.split(" ");
        System.out.println(y[3]+" "+y[2]+" "+y[1]+" "+y[0]);
// if the input string is different meaning if the number of words are greater than or less than four then try this way

/*for(int i=y.length-1;i>=0;i--)
        {
            System.out.print(y[i]+ " ");
        }*/
    }

}

これは出力を示すスクリーンショットです ここに画像の説明を入力

于 2013-09-13T09:24:58.560 に答える