判断两个字符串是不是互为变形词的几种方法

判断两个字符串是否互为变形词的几种方法

本文给出几个判断两个字符串是否互为变形词的方法。

方法一 : 借助Arrays工具类实现

 

import java.util.Arrays;
 
public class AnagramCheck {
 
    public boolean isAnagram(String s1, String s2) {
        if (s1 == null || s2 == null || s1.length() != s2.length()) {
            return false;
        }
        char[] ch1 = s1.toCharArray();
        char[] ch2 = s2.toCharArray();
        Arrays.sort(ch1);
        Arrays.sort(ch2);
        return Arrays.equals(ch1, ch2);
    }
 
}

 当然,方法一并不是最快的方法,但是在绝大部分情况下已经足够好了。

方法二 : 使用String的indexOf方法判断

在该方法中,从头开始判断各个字符是否存在于对方的字符串中,只要有一个不存在,则返回false。

public class AnagramCheck {
 
    public boolean isAnagram(String s1, String s2) {
 
        if (s1 == null || s2 == null || s1.length() != s2.length()) {
            return false;
        }
        int i = 0;
        int j = 0;
 
        //不需要判断t j< s2.length()因为s1 和 s2的长度是一样的
        while (i < s1.length()) {
            if (s1.indexOf(s2.charAt(j)) < 0 || s2.indexOf(s1.charAt(i)) < 0)
                return false;
            i++;
            j++;
        } 
 
        return true;
    }//O(n log n)
 
}

 

方法三 : 适用于8位字符集的检测方法

该方法适合只包含8位字符集的字符串不适合包含中文的字符串比较。

 

public class AnagramCheck {
 
    public boolean isAnagram(String s1, String s2) {
 
        if (s1 == null || s2 == null || s1.length() != s2.length()) {
            return false;
        }
 
        /* 假设是8位字符集 */
        int[] counts = new int[256];
 
        int len = s1.length();
 
        for (int index = 0; index < len; index++) {
            if((int) s1.charAt(index) > 0 && (int) s2.charAt(index) > 0){
                counts[(int) s1.charAt(index)]++;
                counts[(int) s2.charAt(index)]--;
            }
        }
 
        for (int index = 0; index < len; index++)
            if (counts[index] > 0)
                return false;
        return true;
    }
 
}

 

原文地址 http://thecodesample.com/?p=864

更多的例子请访问 http://thecodesample.com/