混乱字符串:给定一个字符串s和一个数字n,编写一个函数,将偶数索引的字符连接到前面



给定一个字符串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();
    }
}

只需逐个字符,并在适当的情况下添加到结果sbEvensbOdd中。之后,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()方法(我假设nlong(:

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();
}

}

相关内容

最新更新