(1)题目描述
假设有一个由多个字母组成的字符串A,和另一个字符串B,B中的字符相对少一些,判断是否B中所含的字母是否A中全都包含。
如:
String a = "ABCDEFGHLMNOPQRS";
String b = "DCGSRQPO";
因为b中所有字符a中都有,所以返回true
如:
String a = "ABCDEFGHLMNOPQRS";
String b = "DCGSRQPOZ";
因为b中的Za中没有,所以返回false
(2)暴力解法
循环b、a,将b中每个字符都与整个a比较,如果存在,则进行下一次比较,直至b中所有字符都与a中字符比较过一遍。时间复杂度O(m*n)
(3)使用位图
使用位图1,记录b中出现了哪些字符,再使用位图2,记录a中出现了哪些字符,再比较两个位图即可
String a = "ABCDEFGHLMNOPQRS";
String b = "DCGSRQPZ";
a = a.toLowerCase();//所有字符均转换为小写
b = b.toLowerCase();
boolean[] aChar = new boolean[26];
boolean[] bChar = new boolean[26];
for(int i=0; i<a.length(); i++)
{
int index = a.charAt(i)-'a';//将字符转化为下标
aChar[index] = true;
}
for(int i=0; i<b.length(); i++)
{
int index = b.charAt(i)-'a';
bChar[index] = true;
}
int i = 0;
for(; i<26; i++)
{
if(bChar[i]==true && aChar[i]==false)
break;
}
if(i==26)
System.out.println(true);
else
System.out.println(false);
注:当然也可以只使用一个位图,先遍历b,出现的设置为true,再遍历a,出现的为true的设置为false,为false的不变,那么如果最终位图中如果有true则说明b中存在a中不存在的字符