【发布时间】:2012-11-21 10:45:35
【问题描述】:
我想做字谜算法但是 此代码不起作用。我的错在哪里? 例如 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;
}
【问题讨论】:
-
你能解释一下你看到了什么错误吗?是否抛出异常?它只是没有返回您的期望吗?它是无限循环的吗?
-
你能举个例子说明
Anagram在你的情况下是什么吗? -
不,只有我写了 des 和 sed 但输出不是字谜
-
为什么你的代码不起作用?因为每次匹配时都会用
s2(少一个字母)覆盖newStr。比如s2是ab,当你匹配b时,newStr变成a,那么当你匹配a时,newStr不会变成空字符串,而是变成b(因为它是s2减去匹配字符)。它不是代码中唯一的错误(重复字符、不同长度的字符串),但它是您将首先看到的错误。 -
可能值得注意的是,在这么长时间之后,Java 已经取得了足够的进步,使其成为单行:
Arrays.equals( a.chars().filter(Character::isAlphabetic).sorted().toArray(), b.chars().filter(Character::isAlphabetic).sorted().toArray());
标签: java algorithm data-structures anagram