-1

如果第一个数组中包含的每个字符也包含在第二个数组中,我将如何编写一个静态方法,该方法接受两个字符数组并返回 true,否则返回 false。字符可以在数组中以任何顺序排列,如果一个字符出现多次,则没有区别。

这是我到目前为止所拥有的,但我对如何完成任务感到困惑

public static boolean compare(char[] arr1, char[] arr2)
{
   for(int i=0; i<arr1.length; i++)
   {



   }


}

仅用于学习是否可以在不使用 java 内置方法的情况下完成此任务

谢谢

4

6 回答 6

3

将问题分为两部分:

  1. 编写一个检查字符是否包含在数组中的方法
  2. 使用此方法测试第一个数组的每个字符是否都包含在第二个数组中。一旦找到第二个数组中不包含的字符,就可以返回 false。在循环结束时,返回 true。
于 2013-05-12T17:38:18.790 回答
2
  1. 使用Arrays.asList(array)将它们转换为集合。
  2. 调用fromArray1.containsAll(fromArray2)以获取结果

正如@JBNizet 所说,没有Arrays.asList()原始数组。

但是char可以使用一个小技巧转换为“收藏” - new String(charArray). 字符串没有.containsAll(charArray)方法(它有......有点 - 它是.equals(otherString))所以数组中的每个字符都应该单独检查string.indexOf(char) != -1

于 2013-05-12T17:38:49.227 回答
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 中。

于 2013-05-12T17:40:38.160 回答
0

创建另一个数组(或哈希集)以用作 bin 来计算字符的出现次数。

首先,运行第一个输入;将与第一个输入中的字符对应的 bin 设置为True.

二、跑通第二个输入;将与第一个输入中的字符对应的 bin 设置为False.

最后,如果 bin 没有True剩余值,则数组 1 中的每个字符在数组 2 中至少出现一次。

于 2013-05-12T17:39:32.267 回答
0

对顶部的第二个数组进行排序

Arrays.sort(arr2);

在循环中添加这一行:

if(!Arrays.binarySearch(arr2, arr1[i])) return false;
于 2013-05-12T17:40:18.677 回答
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;
}
于 2013-05-12T17:41:16.687 回答