【问题标题】:Anagram-compare two stringsAnagram-比较两个字符串
【发布时间】:2017-07-18 01:38:01
【问题描述】:

我正在尝试编写一个函数来确定两个字符串是否是彼此的字谜。我给函数两个除了大小写之外都相等的字符串,它失败了,即使我在比较中忽略了大小写。

测试用例:

hello
Hello

对于这些输入,我的输出不是字谜,而是字谜

源代码:

static boolean isAnagram(String a, String b) {

    char[] a1 = a.toCharArray();
    char[] b1 = b.toCharArray();
    Arrays.sort(a1);
    Arrays.sort(b1);
    String x = new String(a1);
    String y = new String(b1);   

    int i=0,flag=0;
    while(i < a1.length)
    {
        if(x.equalsIgnoreCase(y)){
            i++;
        }
        else
            return false;   
    }
   return true;
}

【问题讨论】:

  • 清理源代码格式并添加描述性介绍

标签: string compare anagram


【解决方案1】:

你不需要while循环;

 static boolean isAnagram(String a, String b) {

    char []a1= a.toLowerCase().toCharArray();
    char []b1= b.toLowerCase().toCharArray();

    Arrays.sort(a1);
    Arrays.sort(b1);

    String x= new String(a1), y = new String(b1);

    return x.equals(y);

  }

【讨论】:

    【解决方案2】:

    查看以下字谜检查方法:

    /**
     * Java program - String Anagram Example.
     * This program checks if two Strings are anagrams or not
     */
    public class AnagramCheck {
    
    /*
     * One way to find if two Strings are anagram in Java. This method
     * assumes both arguments are not null and in lowercase.
     *
     * @return true, if both String are anagram
     */
    public static boolean isAnagram(String word, String anagram){       
        if(word.length() != anagram.length()){
            return false;
        }
    
        char[] chars = word.toCharArray();
    
        for(char c : chars){
            int index = anagram.indexOf(c);
            if(index != -1){
                anagram = anagram.substring(0,index) + anagram.substring(index +1, anagram.length());
            }else{
                return false;
            }           
        }
    
        return anagram.isEmpty();
    }
    
    /*
     * Another way to check if two Strings are anagram or not in Java
     * This method assumes that both word and anagram are not null and lowercase
     * @return true, if both Strings are anagram.
     */
    public static boolean iAnagram(String word, String anagram){
        char[] charFromWord = word.toCharArray();
        char[] charFromAnagram = anagram.toCharArray();       
        Arrays.sort(charFromWord);
        Arrays.sort(charFromAnagram);
    
        return Arrays.equals(charFromWord, charFromAnagram);
    }
    
    
    public static boolean checkAnagram(String first, String second){
        char[] characters = first.toCharArray();
        StringBuilder sbSecond = new StringBuilder(second);
    
        for(char ch : characters){
            int index = sbSecond.indexOf("" + ch);
            if(index != -1){
                sbSecond.deleteCharAt(index);
            }else{
                return false;
            }
        }
    
        return sbSecond.length()==0 ? true : false;
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 2019-08-15
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多