使用数组的 Anagram 求解器的结束条件:Java

End condition for Anagram solver using Arrays: Java

抱歉,如果这是一个有点愚蠢的问题,但我一直对此有一些疑问。该项目是一个超级 Anagram 求解器,如果从键盘读取的第一个短语中的字母是从键盘读取的第二个短语中的某些字母的 Anagram,则 return 为真。我对该算法的想法是将字符串转换为数组,然后向下查找第一个字符串的数组,并将每个字符与第二个数组中的每个字符进行比较,以尝试找到匹配项,如果找到则删除该字符的实例无法再次使用。如果在第二个数组中搜索字母从未失败,则该方法将为 return true,但如果找不到字母,则为 false。不过,我不知道如何或在哪里放置 return 语句,而且我正在画一个空白。

class SuperAnagram {
   public boolean isSuperAnagram(String s, String st){
      s.toLowerCase();
      st.toLowerCase();
      char[] array1 = s.toCharArray();
      char[] array2 = st.toCharArray();
      for(int i = 0;(i<array1.length);i++){
         for(int j = 0;(j<array2.length);j++){
           if (array1[i] == array2[j]){
           array2[j] = ' ';

           }
          }
         }
        }
       }           

如果我对你的问题的理解正确,这是你可以解决的一种方法。

您可以使用布尔值作为标志:

public boolean isSuperAnagram(String s, String st){
    s.toLowerCase();
    st.toLowerCase();
    char[] array1 = s.toCharArray();
    char[] array2 = st.toCharArray();

    boolean myFlag = true; // flag is initially true to enter the loop

    // added another condition to the loop - will exit if myFlag == false
    for(int i = 0; i < array1.length && myFlag; i++){
        myFlag = false;
        for(int j = 0; j < array2.length; j++){
           if (array1[i] == array2[j]){
               array2[j] = ' ';
               myFlag = true;   // found a match, set our flag == true
               // we only want to replace ONE letter, not ALL (so break out of the loop)
               break; 
           }
        }
    }

    // will only return true if every letter in array1 matched some letter in array2
    return myFlag;
}

您忘记了 return 布尔值。在 if 语句的末尾 return 正确