问题:由相同的字符组成是指两个字符串,字母以及各个字母的个数是相同的,只是顺序不同。如:“aaaabbc”与“abcbaaa”是由相同字符组成。
,也是最容易想到的方法,将两个字符串转换为字节数组,分别排序后,判断是否相同即可。
(空间换时间),利用映射集合关键的唯一性,遍历第一个字符串,将字符作为关键字符出现的次数作为价值,若遇到重复字符则将值+ 1。之后遍历第二个字符串,遇到字符就将对应的值1,若值值为1时,就将该字符删除掉。最后判断地图是否为空,为空则说明两字符串相同。
(空间换时间):由于ASCII字符共266个,申请一个字节数组字节[256],初始化为0,然后遍历第一个字符串,将对应的ASCII下标+ 1,然后遍历第二个字符串,将对应标1。若最后数组中各个元素的值都是0,则说明字符串相等,反之不等。
<强>先给出方法二、方法三源码:强>
包CharString; 进口java.util.HashMap; 进口java.util.Map; 公开课CompareString { 公共静态布尔比较(char [], char [] b) { int阿伦=a.length; int bLen=b.length; 如果(阿伦!=bLen) { 返回错误; } Integer> Map<角色;地图=new HashMap<性格,Integer> (); for (int i=0; i<,阿伦,我+ +){ 如果(map.containsKey([我])){ 地图。把(一个[我],map.get([我])+ 1); 其他}{ 地图。((我),1); } } (int j=0; j< bLen; j + +) { 如果(map.containsKey ([j]),和map.get ([j])==1) { map.remove ([j]); 其他}{ 地图。把(一个[j], map.get ([j]) 1); } } 返回map.isEmpty (); } 公共静态布尔compare2(字符串,字符串b) { byte [] b1=a.getBytes (); byte [] b2=b.getBytes (); int [] bCount=new int [256]; for (int i=0; i<256;我+ +){ bCount[我]=0; } for (int i=0; i之前 为了测试,两个方法的运行时间,构造较大的字符串,运行结果:
真正的 集合用时:54毫秒 真正的 数组用时:17毫秒由此可见,数组法的运行效率更高,若在对空间没要求的情况下,推荐使用第三种方法。
以上这篇Java判断两个字符串是否由相同的字符组成的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
Java判断两个字符串是否由相同的字符组成的实例