1092 To Buy or Not to Buy

题意:给出两个字符串s1和s2(长度不超过1000),问s1是否包含s2中的所有字符,若包含,则输出Yes,并输出s1中多余的字符个数;若不完全包含,则输出No,并输出缺少的个数。

思路:定义数组int cnt[128],遍历字符串s1,记录各个字符出现的次数,cnt[i]表示i对应的字符出现的次数;然后遍历字符串s2,每访问一个字符,就把对应的cnt[i]减1,当遍历完了之后,若cnt[]均大于等于0,则说明s1含有s2的所有字符,输出Yes,以及strlen(s1)-strlen(s2);否则,说明s1不完全包含s2的所有字符,cnt[]中小于0的绝对值即为缺少的字符个数。

代码:

#include <cstdio>
#include <cstring>

int main()
{
    //freopen("pat.txt","r",stdin);
    char str1[1005],str2[1005];
    scanf("%s",str1);
    scanf("%s",str2);
    int cnt[128]={0};
    int len1=strlen(str1);
    for(int i=0;i<len1;i++) cnt[str1[i]]++;
    int len2=strlen(str2);
    int miss=0;
    for(int i=0;i<len2;i++){
        cnt[str2[i]]--;
        if(cnt[str2[i]]<0) miss++;
    }
    if(miss>0) printf("No %d",miss);
    else printf("Yes %d",len1-len2);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/kkmjy/p/9551583.html
今日推荐