プログラムに文字列を挿入しています
String str = " I live in India";
そのような逆文字列を取得するにはどうすればよいですか
String str ="India in live I"
これは私のインタビューでのインタビューの質問です. 誰でもこの質問で私を助けてください
プログラムに文字列を挿入しています
String str = " I live in India";
そのような逆文字列を取得するにはどうすればよいですか
String str ="India in live I"
これは私のインタビューでのインタビューの質問です. 誰でもこの質問で私を助けてください
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[]
配列を取り、要素を元start
のend
場所に戻すメソッドを書きましょう。
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)
) になります。
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 ループが最後の要素から最初の要素まで配列を反復処理し、結果の文字列に単語と空白を追加します。最後に、最後の単語の後の空白が削除されます。
この方法を試してください
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]+ " ");
}*/
}
}
これは出力を示すスクリーンショットです