我在我的程序中插入一个字符串
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
虽然简短而直接,但该解决方案在时间和内存方面并不是真正有效的。这在一定程度上取决于输入的给出方式(作为 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)
)。
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]+ " ");
}*/
}
}
这是显示输出的屏幕截图