我制作了以下方法,用字母表中的所有可能字母替换单词中的每个字母,并将所有替代字存储在数组中:
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)。有没有更无摩擦的方式这样做?
答案 0 :(得分:2)
您可以在外部循环之前创建tmpWord
一次,然后在创建新for
后将您更改的字符放回内部String
循环中,还原tmpWord
原来的内容。
不确定那是多么“无摩擦”。