如何查看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
数组来提高性能,但我将把优化留给您。)完成此步骤后,您只需通过较小的数组检查计数是否正确≤ 相应的计数在较大的一个中。这里有四个步骤可以帮助您解决此类问题
A = [a,b,b,c,c,d,d]
其他与:
B = [a,b,b,c,c,c,d,d]
如果你想知道A中的所有元素是否都存在于B中,你(在现实生活中)会怎么做
那么你:
祝你好运你必须计算数组中的每个字符。如果数组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;
}
}