题解 | #字符串字符匹配#
字符串字符匹配
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; }