java编程检测两个单词是否为变位词

内容分享3小时前发布
0 0 0

如果在不计顺序的情况下,两个单词包含完全一样的字符,则称这两个单词互为变位词,例如“silent”和“listen”互为变位词。实现方法思路:对于两个字符串str1,str2,(字符个数相等),设置一个布尔数组(初始为false),长度和字符串长度一样,取定str2中一个字符,从str1开头开始查找,如果查找到,取得str1相等字符的下标,然后设置布尔数组对应得下标的值为true,所有字符对比完,看布尔数组是否都为true。代码如下:

public static boolean isAnagram(String str1,String str2)
{
    if(str1==null || str2==null || str1.equals("")||str2.equals("")
                ||str1.length()!=str2.length())
        return false;
        
    boolean[] bos = new boolean[str1.length()];
    for(int i=0;i<bos.length;i++)
        bos[i] = false;
    for(int i=0;i<str2.length();i++)
    {
        for(int j=0;j<str1.length();j++)
        {
            if(str2.charAt(i)==str1.charAt(j)&&bos[j]!=true)
            {
                bos[j]=true;
                break;
            }
        }
    }
    for(int i=0;i<bos.length;i++)
        if(!bos[i])
            return false;
    return true;
        
    }

测试代码随机产生字符串,然后把字符串打散,看比对的结果
随机产生字符串的代码:

String[] strs = new String[3];
StringBuilder sbu = new StringBuilder();
Random random = new Random();
for(int i=0;i<strs.length;i++)
{
    sbu.delete(0, sbu.length());
    int num = 4 + random.nextInt(12);
    for(int j=0;j<num;j++)
    {
        int de = random.nextInt(26);
        sbu.append((char)( a +de));
    }
    strs[i]= sbu.toString();
}

把给定的字符串打散,代码如下:

public static String[] dasan(String[] strs)
{
    String[] strs1 = new String[strs.length];
    Random random = new Random();
    for(int i=0;i<strs.length;i++)
    {
        char[] s = strs[i].toCharArray();
        for(int j=0;j<strs[i].length()/3;j++)
        {
            int x = random.nextInt(strs[i].length());
            int y = random.nextInt(strs[i].length());
            if(x!=y)
            {
                char c = s[x];
                s[x]=s[y];
                s[y]=c;
            }
        }
        strs1[i]=new String(s);
    }
    return strs1;
}

测试代码如下:

for(int i=0;i<strs.length;i++)
{ 
    boolean flag = isAnagram(strs[i],strs1[i]);
    if(flag)
        System.out.println(strs[i] + "   和       "+strs1[i]+"  互为变位词");
    else
        System.out.println(strs[i] + "   和    "+strs1[i]+"   不是互为变位词");
}
System.out.println(isAnagram("sulent","listen"));
结果如下:
oqcbpluurrpit   和       oqcbrluiprput  互为变位词
fyiydaxhfa   和       ayiadfyhfx  互为变位词
dvyivkvpfkr   和       pvykvkvdfir  互为变位词
false

这里只是完成的主要代码,主要是解决问题的思路,供大家参考。
由于水平有限,如果有错误,请大家多多批评指导,提高水平,共同学习。

© 版权声明

相关文章

暂无评论

none
暂无评论...