确定两个词是否是字谜

arc4randall

最近,我进行了一个测验,要求我确定数组中的元素是否为字谜。我完成了一个实现,但是在运行他们的测试时,我仅通过了5个测试用例中的1个。问题是,它们不允许我查看测试内容,因此我不确定自己的测试失败了。我在下面重新创建了我的答案,该答案基本上是将单词中的字母乘以并将此数字添加到数组中。然后,它将一个数组中的数字与另一个数组中的数字进行比较,如果它们相同,则输出true。我基本上是在问什么情况下会失败,以及我将如何修改此代码以解决这些情况?

public class anagramFinder {
    public static void main (String[] args){
        String[] listOne = new String[5];
        listOne[0] = "hello";
        listOne[1] = "lemon";
        listOne[2] = "cheese";
        listOne[3] = "man";
        listOne[4] = "touch";

        String[] listTwo = new String[5];
        listTwo[0] = "olleh";
        listTwo[1] = "melon";
        listTwo[2] = "house";
        listTwo[3] = "namer";
        listTwo[4] = "tou";

        isAnagram(listOne,listTwo);
    }

    public static void isAnagram(String[] firstWords, String[] secondWords){
        int firstTotal = 1;
        int secondTotal = 1;
        int[] theFirstInts = new int[firstWords.length];
        int[] theSecondInts = new int[secondWords.length];

        for(int i = 0;i<firstWords.length;i++){
            for(int j = 0;j<firstWords[i].length();j++){
                firstTotal = firstTotal * firstWords[i].charAt(j);
            }

            theFirstInts[i] = firstTotal;
            firstTotal = 1;
        }

        for(int i = 0;i<secondWords.length;i++){
            for(int j = 0;j<secondWords[i].length();j++){
                secondTotal = secondTotal * secondWords[i].charAt(j);
            }

            theSecondInts[i] = secondTotal;
            secondTotal = 1;
        }

        for(int i=0;i<minimum(theFirstInts.length,theSecondInts.length);i++){
            if(theFirstInts[i] == theSecondInts[i]){
                System.out.println("True");
            } else {
                System.out.println("False");
            }
        }
    }
    public static int minimum(int number,int otherNumber){
        if(number<otherNumber){
            return number;
        } else {
            return otherNumber;   
        }
    }
}

在上面的示例中,我在main方法中运行,它输出True True False False False False,这是正确的

异想天开

乘以ASCII码的想法不错,但也不是十全十美的。需要进行深入分析,以显示两个不同的词在给定范围从“ a”到“ z”的范围内,可以具有相同的乘积。

一种常规方法是创建用于计数字母的地图,并比较地图。

另一个将对字母排序并比较排序后的字符串。

第三个将遍历第一个单词的字母,尝试在第二个单词中找到该字母,然后将第二个单词减去该字母。

我想不出第四种方法,但是我几乎可以肯定有一种;-)

之后

好吧,这是第四种方式:将26个素数分配给'a'到'z',然后(使用BigInteger)根据单词的字母乘以素数。字谜产生相同的产品。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章