我有点卡在这个涉及返回字符串数组中同构对的数量的java问题上。我编写的代码不断返回错误数量的同构词对。
同构词的定义如下:如果一个词中的字母可以重新映射得到第二个词,则两个词称为同构词。重新映射一个字母意味着用另一个字母替换所有出现的字母。字母的顺序保持不变。没有两个字母可以映射到同一个字母,但一个字母可以映射到它自己。例如,单词“abca”和“zbxz”是同构的,因为我们可以将“a”映射到“z”,“b”映射到“b”,“c”映射到“x”。我不包括我在函数中调用的 getMap 方法。getMap 方法将任意字符串作为输入,并返回一个映射,其中键是字符串中的字母,对应的值是字母在字符串中出现的次数。
public class IsomorphicWords {
public int countPairs(String[] words) {
Set <String> pairs = new HashSet<String>();
for (String word:words){
Map noOfOccurencesOfEachLetter= getMap(word);
ArrayList<Integer> valuesFromFirstWord = new ArrayList<Integer>(noOfOccurencesOfEachLetter.values());
Collections.sort(valuesFromFirstWord);
java.util.List<String> list = new ArrayList<String>(Arrays.asList(words));
list.remove(word);
String[] oneLessWord = list.toArray(new String[words.length-1]);
for(String secondWord:oneLessWord){
Map secondNoOfOccurencesOfEachLetter = getMap(secondWord);
ArrayList<Integer> valuesFromSecondWord = new ArrayList<Integer>(secondNoOfOccurencesOfEachLetter.values());
Collections.sort(valuesFromSecondWord);
if (valuesFromFirstWord.equals(valuesFromSecondWord)){
pairs.add(""+word+","+secondWord+"");
}
else{
continue;
}
}
}
return pairs.size()/2;
public Map getMap(String word){
HashMap<String,Integer> noOfOccurencesOfEachLetter= new HashMap<String,Integer>();
for (int i=0;i<word.length();i++){
char letter = word.charAt(i);
String letterInDictionary= Character.toString(letter);
if (noOfOccurencesOfEachLetter.containsKey(letterInDictionary)==true){
int count= noOfOccurencesOfEachLetter.get(letterInDictionary);
noOfOccurencesOfEachLetter.put(letterInDictionary, count+1);
}
else{
noOfOccurencesOfEachLetter.put(letterInDictionary, 1);
}
}
return noOfOccurencesOfEachLetter;
}
}
我真的很感激你能给我关于这段代码的任何反馈。
谢谢,朱奈德