判断两个字符串是否互为变形词的几种方法_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 判断两个字符串是否互为变形词的几种方法

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

 2014/11/14 16:04:11  MouseLearnJava  程序员俱乐部  我要评论(0)
  • 摘要:本文给出几个判断两个字符串是否互为变形词的方法。方法一:借助Arrays工具类实现importjava.util.Arrays;publicclassAnagramCheck{publicbooleanisAnagram(Strings1,Strings2){if(s1==null||s2==null||s1.length()!=s2.length()){returnfalse;}char[]ch1=s1.toCharArray();char[]ch2=s2.toCharArray()
  • 标签:方法 字符串

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

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

?

class="java" name="code">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/

?

上一篇: 征服ZooKeeper之基本配置 下一篇: 没有下一篇了!
发表评论
用户名: 匿名