编写一个布尔函数,它将两个无序的char数组作为 参数。第一个数组的大小保证小于或 等于第二个数组的大小。如果,该函数返回true 第一个数组中的每个元素都包含在第二个数组中。
结果:
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;
}
答案 0 :(得分:1)
以下四个步骤可以帮助您解决这些问题。
最后一部分是最简单的部分。
至于第3步:
假设你有一个方框:
A = [a,b,b,c,c,d,d]
和其他:
B = [a,b,b,c,c,c,d,d]
如果你想知道A中的所有元素是否存在于B中,你将如何(在现实生活中)?
嗯,你:
尽管看起来很荒谬,但这是编码的第一步。
现在采取每个步骤为它创建一个伪代码(不是真正的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提到的内容做好准备,您可以搜索更好的算法来优化您的搜索。
但是,首先尝试以这种方式解决它。
祝你好运答案 1 :(得分:0)
缺少家庭作业标签吗?
由于处理重复的方式,我认为您应该将两个数组转换为Map<Character, Integer>
计数。 (实际上,如果你知道'a'和'z'之间的输入是char
,最好使用int
数组来提高性能,但我会优化你。)完成此步骤后,您只需通过较小的数组并检查计数是否小于较大数组中的相应计数。
答案 2 :(得分:0)
你必须将每个角色都计算在一起。如果数组2中的每个字符的计数都高于数组1中的对应字符,则返回true,否则返回false。
答案 3 :(得分:0)
终于做到了!!!
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;
}
}