如何解决如何查看Java中的数组是否包含另一个数组的所有元素?
|解决方法
这里有四个步骤可以帮助您解决这类问题。
首先了解问题所在。
识别功能和变量
考虑一下您将如何在现实生活中做到这一点
编码。
最后一部分是最简单的部分。
至于步骤3:
假设您有一个装有以下物品的盒子:
A = [a,b,c,d,d]
以及其他:
B = [a,d]
如果您想知道A中的所有元素是否都存在于B中,您将如何(在现实生活中)?
好吧,你:
取第一个元素(a)
在B中寻找
如果存在,则说明您正确无误(OK = true)。
如果不是,则以OK = false结尾
重复直到完成所有元素。
看起来很荒谬,这是编码的第一步。
现在,执行每一步并为其创建一个伪代码(不是真正的Java代码)
//1. Take the first element ( a )
e = A[0]
//2. Look for it in in B
for each x in B do
if x == b found = true
end
found = false
//3. If it exists,you\'re right on track ( OK = true ).
if found == true ? OK = true continue...
//4. If it doesn\'t you end with OK = false
else OK = false
//5. Repeat until you finish with all the elements.
go to 1.- using A[1]
Check the value of \"OK\" at the end and that will be your answer.
一旦您正确并完成了这部分(注意我的伪代码可能是错误的,就必须自己检查一下),然后就可以进行编码了,这将非常简单。
稍后,当您完全了解此过程后,可以跳过编写算法的部分,并准备好接受Andrew Lazarus提到的内容,可以搜索更好的算法来优化搜索。
但是,请首先尝试以这种方式解决它。
祝好运
, 缺少作业标签吗?
由于重复的处理方式,我认为您应该将两个数组都转换为带有计数的Map<Character,Integer>
。 (实际上,如果您知道输入是\'a \'和\'z \'之间的char
,则最好使用int
数组来提高性能,但我将优化留给您。)完成后,您只需遍历较小的数组,并检查计数是否≤较大数组中的相应计数。
, 您必须计算两个数组的每个字符。如果数组2中的每个字符的计数都比数组1中的每个字符高,则返回true,否则返回false。
, 终于做到了!!!
import java.util.Arrays;
class stringClass
{
public static void main(String args[])
{
char s1[] = { \'a\',\'b\',\'c\',\'d\',\'d\' };
char s2[] = { \'a\',\'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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。