我有点陷入这个涉及返回字符串数组中同构对数的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;
  }
}


非常感谢您可以提供有关此代码的任何反馈。

谢谢,
朱尼德

最佳答案

它给出错误答案的原因可能是由于您计算了字母数,而不是看他们在两个单词中的位置。我想到的第一个解决方案是创建一个新数组,在该数组中,您将字母转换为每个单词该字母首次出现的索引。例如:“ abcd”将是“ 0123”,“ abca”将是“ 0120”,“ fhjf”也将是“ 0120”。然后,您可以简单地比较结果。我希望这有帮助...

10-08 03:40