避免在循环内使用toCharArray()或arrayCopy进行冗余

时间:2017-09-07 19:25:49

标签: java arrays time-complexity

我制作了以下方法,用字母表中的所有可能字母替换单词中的每个字母,并将所有替代字存储在数组中:

private String[] replaceLetters(String word, char[] alphabet){
    //replacing one letter with an arbitrary letter from alphabet, for each letter place in the word.
    int wordLength = word.length();
    String[] words = new String[alphabet.length*wordLength];
    char[] tmpWord = word.toCharArray();
    int counter = 0;
    for(int i = 0; i<wordLength; i++){
        tmpWord = word.toCharArray();   
        for(char c : alphabet){
            tmpWord[i] = c;
            words[counter] = new String(tmpWord);
            counter++;
        }
    }
    return words;
}

在for循环开始时,我使用String.toCharArray()创建一个新对象,以便重置对内循环中对tmpWord-object所做的更改。换句话说,我想确保重置tmpWord,使其等于循环中每次迭代的原始char数组word.toCharArray()。

似乎对外循环中的每次迭代重复此操作应该是多余的。我知道toCharArray()的时间复杂度是O(N),并且因为外部循环也是O(N),所以我理解这个片段的时间复杂度是O(N ^ 2)。有没有更无摩擦的方式这样做?

1 个答案:

答案 0 :(得分:2)

您可以在外部循环之前创建tmpWord一次,然后在创建新for后将您更改的字符放回内部String循环中,还原tmpWord原来的内容。

不确定那是多么“无摩擦”。