首页 > 试题广场 >

字符串字符匹配

[编程题]字符串字符匹配
  • 热度指数:160442 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
判断短字符串S中的所有字符是否在长字符串T中全部出现。
请注意本题有多组样例输入。
数据范围:
进阶:时间复杂度:,空间复杂度:

输入描述:

输入两个字符串。第一个为短字符串,第二个为长字符串。两个字符串均由小写字母组成。



输出描述:

如果短字符串的所有字符均在长字符串中出现过,则输出字符串"true"。否则输出字符串"false"。

示例1

输入

bc
abc

输出

true

说明

其中abc含有bc,输出"true"
 
#include <stdio.h>
#include <string.h>

int main() {
    int bz[26] = {0};
    char ss[200],ls[300];
    scanf("%s",ss);
    scanf("%s",ls);
    int m = strlen(ss), n = strlen(ls), result = 1;
    for(int i = 0; i<n; i++){
        bz[ls[i] - 'a'] = 1;
    }
    int sum = 0;
    for(int i = 0;i<26; i++) sum += bz[i];
    if(sum == 26){printf("true");return 0;} 

    for(int i = 0; i<m; i++){
        if(bz[ss[i] - 'a'] != 1){printf("false");return 0;} 
    }
    printf("true");
    return 0;
}

编辑于 2023-12-03 21:23:20 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char S[201] = {'\0'};
    char T[201] = {'\0'};
    scanf("%s",S);
    scanf("%s",T);
    int arr[26] = { 0 };
    int i = 0;
    for ( i = 0;i < strlen(T); i++)
    {
        arr[T[i] - 'a']++;
    }
    for (i = 0; i < strlen(S); i++)
    {
        if (arr[S[i] - 'a'] == 0)
        {
            printf("false\n");
            break;
        }
    }
    if (i == strlen(S))
    {
        printf("true\n");
    }
    return 0;
}
发表于 2023-10-13 21:50:11 回复(0)
#include <stdio.h>

void judge(char*T,char*S);

int main() {
    char S[200],T[201];
    gets(S);
    gets(T);
    judge(T,S);
    return 0;
}
void judge(char*T,char*S){
    int exist[128]={0};
    for(int i=0;i<strlen(T);i++)
    {
        exist[T[i]]=1;
    }
    int i=0;
    while (exist[S[i]]&&i<strlen(S)) {
    i++;
    }
    if(i==strlen(S)) printf("true\n");
    else printf("false\n");
}

发表于 2023-03-28 16:01:59 回复(0)
/* 利用strstr 函数非常简单!*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char s[200], l[200];
    while(scanf("%s", s) != EOF)
    {
        scanf("%s", l);     
        char *ret; //子串第一次出现的位置
         ret = strstr(l, s);  
        if(ret != NULL)
            printf("true");
        else
            printf("false");
    }
    return 0;
}

发表于 2022-08-13 10:56:14 回复(0)
#include <stdio.h>


int main()
{
    char strS[200];
    char strT[200];
    
    scanf("%s %s",strS,strT);
    
    int lenS = strlen(strS);
    int lenT = strlen(strT);
    
    int i,j;
    int samenum = 0;//字符串S中能在字符串T中找到的字符的个数
    //用能找到相同字符的个数 == 字符串S的字符数来判断
    for(i=0;i<lenS;i++)
    {
        for(j=0;j<lenT;j++)
        {
            if(strS[i] == strT[j])
            {
                samenum++;
                break;
            }
        }
    }
    
    if(samenum == lenS)
        printf("true");
    else
        printf("false");
    
    return 0;
}

发表于 2022-05-17 16:16:51 回复(0)
比较笨一点
int main(void)
{
    char str_short[201] = {0};
    char str_long[201] = {0};
    
    fgets(str_short, sizeof(str_short), stdin);
    fgets(str_long, sizeof(str_long), stdin);
    
    int count_short[128];
    memset(count_short, 0, sizeof(count_short));
    int count_long[128];
    memset(count_long, 0, sizeof(count_long));
    
    for (int i =0; i< strlen(str_short) - 1; i++) {
        count_short[str_short[i]]++;
    }
    for (int i = 0; i < strlen(str_long) - 1; i++) {
        count_long[str_long[i]]++;
    }
    
    int flag1 = 0;
    int flag2 = 0;
    for (int i = 97; i <= 128; i++) {
        if (count_short[i] >= 1)
            flag1++;
        if (count_short[i] >= 1 && count_long[i] >= 1)
            flag2++;
    }
    if (flag1 == flag2)
        printf("true\n");
    else
        printf("false\n");
    
    return 0;
}
发表于 2022-04-12 23:54:49 回复(0)
#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[200] = { 0 };
    char arr2[200] = { 0 };
    while (gets(arr1))
    {
        gets(arr2);
        int count = 0;
        int len1 = strlen(arr1);
        int len2 = strlen(arr2);
        for (int i = 0; i < len1; i++)
        {
            for (int j = 0; j < len2; j++)
            {
                if (arr1[i]-arr2[j]==0)
                {
                    count++;
                    break;
                }
            }
        }
        if(count==len1)
            printf("true\n");
        else
            printf("false\n");
    }
    return 0;
}

发表于 2022-04-10 14:46:17 回复(0)
#include<stdio.h>
#include<string.h>
int main()
{
    char str[200]={0};
    char ret[200]={0};
    int mat[26]={0};
    scanf("%s",str);
    scanf("%s",ret);
    if(strlen(str)>strlen(ret))
    {
        printf("false");
        return 0;
    }
    for(int i=0;i<strlen(str);i++)
    {
            int temp=(int)str[i]-97;
        if(mat[temp]!=1)
            mat[temp]++;
    }
    for(int i=0;i<strlen(ret);i++)
    {
        int temp=(int)ret[i]-97;
        mat[temp]--;
    }
    for(int i=0;i<26;i++)
    {
        if(mat[i]>0)
        {
            printf("false");
            return 0;
        }
    }
    printf("true");
    return 0;
}

发表于 2022-03-19 20:21:40 回复(0)
// 暴力解
#include <stdio.h>
#include <string.h>

int main(void)
{
    char longStr[1024] = {'\0'};
    char shortStr[512] = {'\0'};
    
    while (scanf("%s%s", shortStr, longStr) != EOF) {
        for (int i = 0; i < strlen(shortStr); i++) {
            int flag = 0;
            for (int j = 0; j < strlen(longStr); j++) {
                if (shortStr[i] == longStr[j]) {
                    flag = 1;
                    break;
                }
            }
            if (!flag) {
                printf("false\n");
                goto OUT; // 进入下一轮循环
            }
        }
        
        printf("true\n");
OUT:
        ; // 空语句,进入下一轮循环
    }
    
    return 0;
}

发表于 2021-09-20 22:12:22 回复(0)