我想做字谜算法,但
此代码无效。我的错在哪里?
例如des和sed是anagram,但输出不是anagram
同时,我必须使用字符串方法。不是数组。 :)

public static boolean isAnagram(String s1 , String s2)
{
    String delStr="";
    String newStr="";

    for(int i=0;i<s1.length();i++)
    {
        for(int j=0 ; j < s2.length() ; j++)
        {
            if(s1.charAt(i)==s2.charAt(j))
            {
                delStr=s1.substring(i,i+1);
                newStr=s2.replace(delStr,"");
            }
        }
    }

    if(newStr.equals(""))
        return true;
    else
        return false;
}

最佳答案

一种更简单的方法可能是只对两个字符串中的字符排序,然后比较它们是否相等:

public static boolean isAnagram(String s1, String s2){

        // Early termination check, if strings are of unequal lengths,
        // then they cannot be anagrams
        if ( s1.length() != s2.length() ) {
            return false;
        }
        s1=s1.toLowerCase();
        s2=s2.toLowerCase();
        char[] c1 = s1.toCharArray();
        char[] c2 = s2.toCharArray();
        Arrays.sort(c1);
        Arrays.sort(c2);
        String sc1 = new String(c1);
        String sc2 = new String(c2);
        return sc1.equals(sc2);
}

我个人认为它比嵌套的for-loops = p更易读

这具有 O(n log n)运行时复杂度,其中n是较长字符串的长度。

编辑:这不是最佳解决方案。参见@ aam1r的答案,了解最有效的方法(即您在采访中应实际说的话)

08-16 18:31