给定一个字符串s和一个数字n,编写一个函数,将偶数索引字符连接到前面,奇数索引字符连接在后面,n次。示例:
- s=";哇,示例">
- result=";WwEapeo xml">
Bellow是我对这个问题的回答,现在我需要优化这个解决方案,使它在O(n(中运行。请帮帮伙计们。
public class main {
public static void main(String[] args) {
String wordToJumble = "Wow Example!";
Long numberOfTimes = 1L;
jumbledString( wordToJumble,numberOfTimes);
}
public static String jumbledString(String s,Long n){
StringBuilder sbEven = new StringBuilder();
StringBuilder sbOdd = new StringBuilder();
StringBuilder s2= new StringBuilder(s);
char[] word = s.toCharArray();
if(n>0) {
while (n > 0) {
n--;
sbEven.setLength(0);
sbOdd.setLength(0);
for (int i = 0; i < word.length; i++) {
if (i % 2 == 0) {
sbEven.append(word[i]);
} else {
sbOdd.append(word[i]);
}
}
s2 = sbEven.append(sbOdd);
word = s2.toString().toCharArray();
}
System.out.println(s2);
}else{
System.out.println(s2);
}
return s2.toString();
}
}
只需逐个字符,并在适当的情况下添加到结果sbEven
或sbOdd
中。之后,append()
对结果字符串执行n次。您可以使用charAt(int)
方法,而不是将字符串强制转换为char[]
。
该解决方案在O(n)
中,但请注意,n
不是您的numberOfTimes
。这是绳子的长度。
public static String jumbledString(String s, long n) {
StringBuilder sbEven = new StringBuilder();
StringBuilder sbOdd = new StringBuilder();
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (i % 2 == 0) {
sbEven.append(s.charAt(i));
} else {
sbOdd.append(s.charAt(i));
}
}
for (int i = 0; i < n; i++) {
result.append(sbEven);
result.append(sbOdd);
}
return result.toString();
}
或者在没有第二个循环的情况下,可以对String
使用repeat()
方法(我假设n
是long
(:
return result.toString().repeat((int) n);
public class main {
public static void main(String[] args) {
String wordToJumble = "Wow Example!";
Long numberOfTimes = 9L;
jumbledString(wordToJumble, numberOfTimes);
}
public static String jumbledString(String s, Long n) {
StringBuilder sbEven = new StringBuilder();
StringBuilder sbOdd = new StringBuilder();
char[] word = s.toCharArray();
if (n > 0) {
for (int x = 0; x < n; x++) {
word = newJumble(word, sbEven, sbOdd);
}
}
System.out.println(word);
return word.toString();
}
private static char[] newJumble(char[] s, StringBuilder sbEven, StringBuilder sbOdd) {
sbEven.setLength(0);
sbOdd.setLength(0);
StringBuilder result;
for (int i = 0; i < s.length; i++) {
if (i % 2 == 0) {
sbEven.append(s[i]);
} else {
sbOdd.append(s[i]);
}
}
result = sbEven.append(sbOdd);
return result.toString().toCharArray();
}
}