我想做字谜算法但是
这段代码不起作用。我的错在哪里?
例如 des 和 sed 是字谜,但输出不是字谜
同时我必须使用字符串方法。不是数组。 :)
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 循环更具可读性=p
这有O(n log n)运行时复杂度,其中n
是较长字符串的长度。
编辑:这不是最佳解决方案。请参阅 @aam1r 的回答,了解最有效的方法(即您在采访中实际应该说的话)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)