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

字符串字符匹配

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;
}

全部评论

相关推荐

01-14 16:23
广州商学院 Java
双非后端失败第N人:如果准备好了可以直接投字节,字节是最不看学历的,只要想面,大概率都能给你约面。
双非有机会进大厂吗
点赞 评论 收藏
分享
01-29 18:11
海南大学 Java
奔跑的suechil...:单从项目看这个简历不怕被问穿吗 带微服务的项目需要相当多的项目理解和经验诶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务