题解 | #字符串字符匹配#

字符串字符匹配

https://www.nowcoder.com/practice/22fdeb9610ef426f9505e3ab60164c93

解题思路

我的解题方法是依次用短字符串中的字符,去和长字符中遍历一遍,如果有就计数变量加一,最后计数变量的大小和snum大小进行比较,如果相等就是全部出现过

本题主要是要注意以下几点

某个字符在长字符串中多次出现,需要避免重复计数

如:i 范围中的b 可能会在 j 范围内多次出现,因此需要一个标志位去判断是否是第一次出现。

下图展现了snum、lnum,i,j的取值范围,可以帮助理解代码

#include <stdio.h>

int main() {
    char Sarr[400]={'\0'},Larr[200]={'\0'};
    int snum=0,lnum=0;//snum是短字符串字符数,lnum是长字符串中字符数
    int i=0,j=0,num=0;//i和j控制循环,num是统计短字符中在长字符串中出现次数的
    int flag=0;//标志位,标志是否是第一次计数
    while(scanf("%c",&Sarr[i])!=EOF)
    {
        if(Sarr[i]=='\n'&&snum==0)
        {
            snum=i;
        }
        else if(Sarr[i]=='\n'&& snum!=0 && lnum==0)
        {
            lnum=i;
            break;
        }
        i++;
    }
    for(i=0;i<snum;i++)
    {
        for(j=snum+1;j<lnum;j++)
        {
            if((Sarr[i]==Sarr[j])&&(flag==0))//如果是第一次计数就进入,num++,标志位置1
            {
                num++;
                flag=1;
            }
        }
        flag=0;//遍历一遍长字符串后,标志位置0
    }
    if(num==snum)
    {
        printf("true");
    }
    else
    {
        printf("false");
    }

    
    return 0;
}

全部评论

相关推荐

美团 客服平台 薪资应该是后端算高的了,我们姑且称为nk了,给3w签字费
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务