Java 字符串字谜的边界条件

Java 字符串字谜的边界条件,java,data-structures,Java,Data Structures,我试图写一个字符串的字谜程序,但在检查边界条件时卡住了 我知道在互联网上有很多方法和程序与使用单循环或集合框架的字符串字谜有关,但我需要为我的代码提供解决方案,即如何在代码中包含边界情况 public class StringAnagram { public static void main(String[] args) { // TODO Auto-generated method stub String str = "abc"; String strAnagram

我试图写一个字符串的字谜程序,但在检查边界条件时卡住了

我知道在互联网上有很多方法和程序与使用单循环或集合框架的字符串字谜有关,但我需要为我的代码提供解决方案,即如何在代码中包含边界情况

public class StringAnagram {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    String str = "abc";
    String strAnagram = "cba";

    boolean areAnagrams = ifAnagrams(str, strAnagram);
    System.out.println(areAnagrams);
}

private static boolean ifAnagrams(String str, String strAnagram) {
    // TODO Auto-generated method stub

    int count = 0;
    char[] a = strAnagram.toCharArray();

    if (str.length() != strAnagram.length()) {
        return false;
    }

    for (int i = 0; i < str.length(); i++) {
        {
            System.out.println("str.charAt(i) in outer loop :" + str.charAt(i));

            for (int j = 0; j < strAnagram.length(); j++) {
                if (str.charAt(i) == strAnagram.charAt(j)) {
                    System.out.println("str.charAt(i) : " + str.charAt(i));
                    System.out.println("strAnagram.charAt(j) : " + strAnagram.charAt(j));

                    count++;
                }
            }
        }
        System.out.println(count);
        if (count == str.length()) {
            return true;
        }
    }

    return false;
}
}
公共类字符串图{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
String str=“abc”;
字符串strAnagram=“cba”;
布尔areAnagrams=ifAnagrams(str,strAnagram);
系统输出打印LN(区域图);
}
专用静态布尔ifAnagrams(字符串str、字符串strAnagram){
//TODO自动生成的方法存根
整数计数=0;
char[]a=strAnagram.toCharArray();
如果(str.length()!=strAnagram.length()){
返回false;
}
对于(int i=0;i
如果我正在输入,代码工作正常- “abc”或“abcd”,其中字符串中的每个字符只出现一次,但当输入类似“aab”时,它会失败。可以将“abc”与“abc”进行比较,它将显示字符串是字谜。
那么,我如何在代码中处理这个条件。请给出建议。

这可能仍然非常低效。我再次为最初忽略了您的要求而道歉,您要求不包含任何收集框架

public class StringAnagram {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // String str = "abc";
        // String strAnagram = "cba";

        String str = "abcdd";
        String strAnagram = "dccba";

        boolean areAnagrams = ifAnagrams(str, strAnagram);
        System.out.println(areAnagrams);
    }



    private static boolean ifAnagrams(String str, String strAnagram) {

        int count = 0;
        char[] a = strAnagram.toCharArray();
        char[] b = str.toCharArray();

        String alphaString = "abcdefghijklmnopqrstuvwxyz";
        char[] alpha = alphaString.toCharArray();

        System.out.println(a);
        System.out.println(b);
        System.out.println("");

        if (str.length() != strAnagram.length()) {
            return false;
        }


        for (int i=0; i < alpha.length; i++) {
            int countA = 0;
            int countB = 0;

            for(int j = 0; j < a.length; j++){

                if (a[j] == alpha[i]) {
                    countA++;
                }
                if (b[j] == alpha[i]) {
                    countB++;
                }

            }

            if (countA != countB) {
                return false;
            }
        }

        return true;
    }
}
公共类字符串图{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
//String str=“abc”;
//字符串strAnagram=“cba”;
String str=“abcdd”;
字符串strAnagram=“dccba”;
布尔areAnagrams=ifAnagrams(str,strAnagram);
系统输出打印LN(区域图);
}
专用静态布尔ifAnagrams(字符串str、字符串strAnagram){
整数计数=0;
char[]a=strAnagram.toCharArray();
char[]b=str.toCharArray();
字符串alphaString=“abcdefghijklmnopqrstuvxyz”;
char[]alpha=alphaString.toCharArray();
系统输出打印项次(a);
系统输出打印ln(b);
System.out.println(“”);
如果(str.length()!=strAnagram.length()){
返回false;
}
for(int i=0;i

此替代解决方案使用包含字母表中所有字母的字符串,并对其进行迭代以检查两个字符串的每个字母计数是否相同。这次没有框架:)

这可能仍然非常低效。我再次为最初忽略了您的要求而道歉,您要求不包含任何收集框架

public class StringAnagram {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // String str = "abc";
        // String strAnagram = "cba";

        String str = "abcdd";
        String strAnagram = "dccba";

        boolean areAnagrams = ifAnagrams(str, strAnagram);
        System.out.println(areAnagrams);
    }



    private static boolean ifAnagrams(String str, String strAnagram) {

        int count = 0;
        char[] a = strAnagram.toCharArray();
        char[] b = str.toCharArray();

        String alphaString = "abcdefghijklmnopqrstuvwxyz";
        char[] alpha = alphaString.toCharArray();

        System.out.println(a);
        System.out.println(b);
        System.out.println("");

        if (str.length() != strAnagram.length()) {
            return false;
        }


        for (int i=0; i < alpha.length; i++) {
            int countA = 0;
            int countB = 0;

            for(int j = 0; j < a.length; j++){

                if (a[j] == alpha[i]) {
                    countA++;
                }
                if (b[j] == alpha[i]) {
                    countB++;
                }

            }

            if (countA != countB) {
                return false;
            }
        }

        return true;
    }
}
公共类字符串图{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
//String str=“abc”;
//字符串strAnagram=“cba”;
String str=“abcdd”;
字符串strAnagram=“dccba”;
布尔areAnagrams=ifAnagrams(str,strAnagram);
系统输出打印LN(区域图);
}
专用静态布尔ifAnagrams(字符串str、字符串strAnagram){
整数计数=0;
char[]a=strAnagram.toCharArray();
char[]b=str.toCharArray();
字符串alphaString=“abcdefghijklmnopqrstuvxyz”;
char[]alpha=alphaString.toCharArray();
系统输出打印项次(a);
系统输出打印ln(b);
System.out.println(“”);
如果(str.length()!=strAnagram.length()){
返回false;
}
for(int i=0;i

此替代解决方案使用包含字母表中所有字母的字符串,并对其进行迭代以检查两个字符串的每个字母计数是否相同。这次没有框架:)

解决方案的问题是,它只检查第一个字符串中的每个字符是否存在于第二个字符串中。您还需要考虑另外两个条件:

  • 如果第二个字符串中的每个字符也出现在第一个字符串中
  • 如果第一个和第二个字符串中每个字符的字符数匹配
  • 对于
    (“aaa”、“abc”)
    的输入,您当前的解决方案将返回
    True
    ,而它应该返回
    False
    。实现我上面提到的第一个条件将解决这个问题

    在实现第一个条件后,对于
    (“abb”、“aab”)
    的输入,您的解决方案将返回
    True
    ,而它应该返回
    False
    。实现上面提到的第二个条件可以解决这个问题

    这是一个