如果在不计顺序的情况下,两个单词包含完全一样的字符,则称这两个单词互为变位词,例如“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
这里只是完成的主要代码,主要是解决问题的思路,供大家参考。
由于水平有限,如果有错误,请大家多多批评指导,提高水平,共同学习。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...


