检查两个字符串是否是字谜

时间:2017-02-13 21:18:11

标签: algorithm stack anagram array-algorithms

如果字符串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

2 个答案:

答案 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。