如何查看Java中的数组是否包含另一个数组的所有元素?

如何查看Java中的数组是否包含另一个数组的所有元素?,java,arrays,Java,Arrays,编写一个布尔函数,将两个无序字符数组作为 参数。第一个数组的大小保证小于或等于 等于第二个数组的大小。如果 第一个数组中的每个元素都包含在第二个数组中 结果: Array One Array Two Return "a" "a" True "aa" "ab" False "cbb" "abbc"

编写一个布尔函数,将两个无序字符数组作为 参数。第一个数组的大小保证小于或等于 等于第二个数组的大小。如果 第一个数组中的每个元素都包含在第二个数组中

结果:

Array One           Array Two           Return
"a"                 "a"                 True
"aa"                "ab"                False
"cbb"               "abbc"              True
"abbccdd"           "abbcccdd"          True
编辑以下是我迄今为止的尝试:

public static Boolean cmprStr( String s1, String s2 )
{
    for(int i = 0; i < s1.length(); i++ )
    {
        if( !s2.contains( String.valueOf( s1.charAt(i) ) ) )
        {
            return false;
        }
    }
    return true;
}
公共静态布尔cmprStr(字符串s1、字符串s2)
{
对于(int i=0;i
是否缺少家庭作业标签


由于处理重复的方式,我认为您应该将两个数组转换为带有计数的
Map
。(实际上,如果您知道输入是一个介于“a”和“z”之间的
char
,最好使用
int
数组来提高性能,但我将把优化留给您。)完成此步骤后,您只需通过较小的数组检查计数是否正确≤ 相应的计数在较大的一个中。

这里有四个步骤可以帮助您解决此类问题

  • 首先了解问题所在
  • 确定函数和变量
  • 想想在现实生活中你会怎么做
  • 编码
  • 最后一部分是最简单的

    至于步骤3:

    假设您有一个盒子,上面有:

    A = [a,b,b,c,c,d,d] 
    
    其他与:

    B = [a,b,b,c,c,c,d,d]   
    
    如果你想知道A中的所有元素是否都存在于B中,你(在现实生活中)会怎么做

    那么你:

  • 以第一个元素(a)为例
  • 在B中查找它
  • 如果它存在,您就在正确的轨道上(OK=true)
  • 如果没有,则以OK=false结束
  • 重复此操作,直到完成所有元素
  • 尽管这看起来很荒谬,但这是编写代码的第一步

    现在,执行每个步骤并为其创建一个伪代码(不是真正的Java代码)

    一旦这个部分正确且完整(注意我的伪代码可能错误,你必须自己检查一下),那么你就可以编写代码了,这将非常简单

    稍后,当你完全理解了这个过程,你可以跳过写下算法的部分,你就可以准备好Andrew Lazarus提到的,你可以搜索更好的算法来优化你的搜索

    但是,先用这种方法解决它


    祝你好运

    你必须计算数组中的每个字符。如果数组2中的每个字符的计数都高于数组1中的对应字符,则返回true,否则返回false

    终于做到了

    import java.util.Arrays;
    
    class stringClass
    {
        public static void main(String args[])
    
        {
            char s1[] = { 'a', 'b', 'b', 'c', 'c', 'd', 'd' };
            char s2[] = { 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd' };
    
            Boolean ret = cmprStr( s1, s2 );
    
            System.out.println( ret );
        }
    
        public static Boolean cmprStr( char[] s1, char[] s2 )
        {
            char subS2[] = new char[s1.length];
            int cnt = 0;
    
            Arrays.sort( s1 );
            Arrays.sort( s2 );
    
            for( int i = 0; i < s1.length; i++ )
            {
                for( int j = 0; j < s2.length; j++ )
                {
                    if( s1[i] == s2[j] )
                    {
                        subS2[cnt++] = s1[i];
                        s2[j] = ' ';
                        break;
                    }
                }
            }
    
            if( Arrays.equals( s1, subS2 ) )
            {
                return true;
            }
    
            return false;
        }
    }
    
    导入java.util.array;
    类字符串类
    {
    公共静态void main(字符串参数[])
    {
    字符s1[]={a',b',b',c',c',d',d'};
    字符s2[]={'a','b','b','c','c','c','d','d'};
    布尔ret=cmprStr(s1,s2);
    系统输出打印项次(ret);
    }
    公共静态布尔cmprStr(字符[]s1,字符[]s2)
    {
    char subS2[]=新字符[s1.长度];
    int-cnt=0;
    数组。排序(s1);
    数组。排序(s2);
    对于(int i=0;i
    听起来像是家庭作业。到目前为止你做了什么?您的尝试在哪里?很简单,您只需检查一个元素中的每个元素是否存在于两个元素中。想一想,如果你有一个盒子,里面有。。。颜色,您必须知道方框
    A
    中的每种颜色是否都存在于方框
    B
    中。在现实生活中(用真实的物体)你会怎么做?一旦你做到了这一点,编码就很容易了。Shamoon,字符串在Java中不是数组,在问题结束之前,考虑一下重新表述你的问题。你把字符串作为参数-这个练习指定了字符数组(这是有区别的!),所以你不应该有字符串参数,而应该有char[]参数,而不是String.contains()您需要数组访问和==运算符。@Shamoon:尝试使用
    Map
    来记录每个字符中出现的频率。当然,对于我通常的$90/小时的速率,+1是唯一一个使用正确算法的,尽管对于初学者来说已经有点过于优化了;)@我认为这和从一开始就给出完整的答案一样糟糕。不投反对票though@Oscar有人可能会说,真正的任务是提出一种算法,在这种情况下,你是对的。啊,我会成为一个可怕的老师:反对遗漏了问题最重要部分的伪代码(用这种方法是不容易解决的);)该算法对A:“aa”和B:“ab”不起作用-另一个bug很容易修复,但那一个似乎更难解决。@Voo不是真的,伪代码并没有给出答案,而是一种为自己思考的方式,对任何想学习编程的人来说都是非常有价值的。我还注意到我的算法在前面是错误的)当然,但我认为这会让可怜的家伙更困惑,而不是帮助-但从一开始我就是一个糟糕的老师,所以我肯定不是讨论这个问题的最佳人选;)
    import java.util.Arrays;
    
    class stringClass
    {
        public static void main(String args[])
    
        {
            char s1[] = { 'a', 'b', 'b', 'c', 'c', 'd', 'd' };
            char s2[] = { 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd' };
    
            Boolean ret = cmprStr( s1, s2 );
    
            System.out.println( ret );
        }
    
        public static Boolean cmprStr( char[] s1, char[] s2 )
        {
            char subS2[] = new char[s1.length];
            int cnt = 0;
    
            Arrays.sort( s1 );
            Arrays.sort( s2 );
    
            for( int i = 0; i < s1.length; i++ )
            {
                for( int j = 0; j < s2.length; j++ )
                {
                    if( s1[i] == s2[j] )
                    {
                        subS2[cnt++] = s1[i];
                        s2[j] = ' ';
                        break;
                    }
                }
            }
    
            if( Arrays.equals( s1, subS2 ) )
            {
                return true;
            }
    
            return false;
        }
    }