如何编写一个带有两个字符数组的静态方法,如果第一个数组中包含的每个字符也包含在第二个数组中,则返回true,否则返回false。字符可以是数组中的任何顺序,如果字符出现多次,则没有区别。
到目前为止,这是我所拥有的,但我对如何完成任务感到困惑
public static boolean compare(char[] arr1, char[] arr2)
{
for(int i=0; i<arr1.length; i++)
{
}
}
只是为了学习,可以在不使用java内置方法的情况下完成此任务
感谢
答案 0 :(得分:3)
将问题分为两部分:
答案 1 :(得分:2)
Arrays.asList(array)
将它们转换为集合。 fromArray1.containsAll(fromArray2)
以获取结果正如@JBNizet所说,基元数组没有Arrays.asList()
。
但是char
可以使用一个小技巧转换为“集合” - new String(charArray)
。字符串没有.containsAll(charArray)
方法(它有...类型 - 它是.equals(otherString)
)所以数组中的每个字符都应该由string.indexOf(char) != -1
单独检查
答案 2 :(得分:1)
public static boolean compare(char[] arr1, char[] arr2)
{
String str = new String(arr2);
//loop
for(int i = 0; i < arr1.length; i++){
if(str.indexOf(arr1[i]) == -1){
return false;
}
}
return true;
}
我们的想法是使用String.indexOf()方法,这样您就可以获得干净清晰的代码。 逻辑是遍历第一个数组中的每个字符,看它是否在第二个数组中,如果它没有返回false。
如果循环成功结束而没有返回,那么A中的每个字符都在B中。
答案 3 :(得分:0)
创建另一个数组(或hashset)以用作计数字符出现次数的bin。
首先,完成第一个输入;
将与第一个输入中的字符对应的bin设置为True
。
第二,贯穿第二个输入;
将与第一个输入中的字符对应的bin设置为False
。
最后,如果垃圾箱没有剩余True
值,
然后,数组1中的每个字符在数组2中至少出现过一次。
答案 4 :(得分:0)
在顶部排序第二个数组
Arrays.sort(arr2);
在循环中添加以下行:
if(!Arrays.binarySearch(arr2, arr1[i])) return false;
答案 5 :(得分:0)
没问题,只需在循环中单独检查每个字符:
public static boolean compare(char[] arr1, char[] arr2)
{
List list = Arrays.asList(arr2);
for(char c: arr1) //this is for-each loop in java
{
if(!list.contains(c)) //c isnt in arr2
{
//this character from arr1 isnt in arr2
return false;
}
}
//all characters from arr1 are in arr2
return true;
}