我有点卡住这个java问题,涉及返回字符串数组中的同构对的数量。我写的代码不断返回不正确的同构字对数。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;
}
}
我真的很感激你可以给我这个代码的任何反馈。
感谢, 朱奈德
你的意思是不正确的?你能给我们提供样品输入,不正确的输出和所需的输出吗? –
我强烈建议你开始重构你的代码。写一个简单的函数来确定两个单词是否同构。然后,您可以在调试器中测试该功能,并且肯定会发现一些问题。祝你好运。 –
为什么在给它添加任何内容之前排序valuesFromFirstWord? –