题目描述
判断字符串b的所有字符是否都在字符串a中出现过,a、b都是可能包含汉字的字符串。b中重复出现的汉字,那么a中也要至少重复相同的次数。汉字使用gbk编码(简单的说,用两个字节表示一个汉字,高字节最高位为1的代表汉字,低字节最高位可以不为1)。
int is_include(char *a, char *b);
返回0表示没有都出现过,返回1表示都出现过。
请设计一个算法。
解题思路:
统计b中每个字符出现的次数,以及b中每个字符在a中出现的次数,进行比较,下面的实现效率有点低(b字符串中相同字符只需统计一次,下面代码每个字符都统计,以后改进),另外代码有点问题,只通过了80%的用例,不知道还有哪些没想到,希望高手发现,请多指点!
java 实现:
import java.util.Scanner;
public class SubCount {
public static void main(String[] args)
{
// String s="abscdkfjksdjflksdssssssddda";
// String t="abzc";
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String t=sc.nextLine();
boolean flag=true;
if(s==null||t==null)
System.out.println(0);
else{
for(int i=0;i<t.length();i++)
{
if(subCount(s,String.valueOf(t.charAt(i)))<subCount(t,String.valueOf(t.charAt(i))))
{
flag=false;
break;
}
}
if(flag==true)
System.out.println(1);
else
System.out.println(0);
}
}
static int subCount(String s,String sub)
{
int count=0;
int index=0;
while((index=s.indexOf(sub,index))!=-1)
{
index=index+sub.length();
count++;
}
return count;
}
}