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

虽然简短而直接,但该解决方案在时间和内存方面并不是真正有效的。这在一定程度上取决于输入的给出方式(作为 aString或其他)以及我们是否可以修改输入以节省计算资源。

假设这个句子是一个字符数组,我们可以修改它。然后我们可以遵循以下方法,这会带来线性时间 ( 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;
    }
  }
}

在 initial 上调用它array,我们得到:

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

我们可以进一步构建String它,或者只是打印它。在任何情况下,句子都可以根据需要颠倒。

这具有线性复杂度 ( O(n)),因为每个字符恰好是一次反转的一部分,并且正在测试一次是否是空格。

至于内存使用,我们只使用了一个额外的变量 ( 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 回答