如果字符串t是s的字谜,我想返回true。我已经在堆栈中推送了s的所有字符,并将t的每个字符与堆栈中的top元素进行比较,如果字符匹配,我执行pop操作。如果最后,stack是空的,这意味着字符串t是字符串s的字谜。这是我的代码 -
public boolean isAnagram(String s, String t) {
char[] charArray1 = s.toCharArray();
char[] charArray2 = t.toCharArray();
if (s.length() != t.length())
{
return false;
}
Stack<Character> newStack = new Stack<Character>();
for (int i=0; i<charArray1.length;i++)
{
newStack.push(charArray1[i]);
}
for (int j=0;j<charArray2.length;j++)
{
if(charArray2[j] == newStack.peek())
{
newStack.pop();
}
}
if (newStack.isEmpty())
{
return true;
}
else
return false;
}
error: s= "abc", t= "bac", Doesn't seem to declare these two strings as anagram
答案 0 :(得分:3)
堆栈是此问题的错误数据结构,因为peek()
仅查看堆栈的顶部元素,但您想检查charArray2
中的每个字符是否都可以找到 charArray1
中的任何地方。一种更简单的方法是对数组进行排序,然后将它们比作Strings
:
public boolean isAnagram(String s, String t) {
char[] charArray1 = s.toCharArray();
char[] charArray2 = t.toCharArray();
Arrays.sort(charArray1);
Arrays.sort(charArray2);
String string1 = new String(charArray1);
String string2 = new String(charArray2);
return string1.contentEquals(string2);
}
答案 1 :(得分:2)
没有必要明确使用堆栈。使用以下任何一种方法。
1)对两个字符串进行排序 2)比较排序的字符串
&#34;或&#34;
此方法假定两个字符串中可能的字符集很小。在下面的实现中,假设使用8位存储字符,并且可以有256个可能的字符 1)为两个字符串创建大小为256的计数数组。将计数数组中的所有值初始化为0 2)迭代两个字符串的每个字符并增加相应计数数组中的字符数 3)比较计数数组。如果两个count数组相同,则返回true。