题目
给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里?
这个问题有点像从10亿个数字中找那几个数字不存在。
英文字母有26个,可以申请26byte的空间,每个byte存放0或1,0表示该bit代表的字母不存在于字符串A,1表示该字母存在于字符串A。
然后从B中取出每个字母,遍历26byte的空间,如果发现该字母在26byte中所表示的byte中是0,则表示这个字母不在A中,否则在A中。
代码如下:
public static boolean isContent(String str,String str1)
{
str=str.toLowerCase();
str1=str1.toLowerCase();
char[] ch=str.toCharArray();
char[] ch1=str1.toCharArray();
byte[] tmp=new byte[26];
for(char s:ch)
{
tmp[s-'a']=1;
}
for(char s:ch1)
{
if(tmp[s-'a']!=1)
{
return false;
}
}
return true;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="abcdef";
String str1="abcg";
System.out.println(isContent(str,str1));
}
注:因为可能会出现大小写不同,这时候要将大写都转换成小写,但是上面的程序的健壮性也是不好的,如果输入了非字母会出现bug,所以如果想要直接拿来用,要适当的加一些限制。