我在刷一道教学平台发布的题,这一到就很简单,让我觉得有点离谱。虽然我过了程序,但有一个样例我却不能通过。
题目如下:
模式匹配是严格的匹配,即强调模式在主串中连续性,例如,模式“bc”是主串“abcd”的子串,而“ac”就不是主串“abcd”的子串。
但在实际应用中,有时并不需要模式的连续性,例如,模式“哈工大”与主串“哈尔滨工业大学”是非连续匹配的,称模式“哈工大”是主串“哈尔滨工业大学”的子序列(解释:意思就是:有部分字符匹配,子串中的所有字符都是来自于子串,而且顺序一致)。
设计算法,判定给定的模式是否为两个主串的公共子序列。
【测试数据】
输入:
哈尔滨工业大学
哈工大
输出:
哈工大是哈尔滨工业大学的子序列!
输入:
abcdefg
xyz
输出:
xyz不是abcdefg的子序列!
【提示】
实现这个代码可以不采用KMP算法。
没错就是这个中文样例。是不是一个中文字符所占的内存不同啊??
具体代码如下
#include<iostream>
#include<string.h>
using namespace std;
const int LEN=1e5;
int main(){
char str1[LEN];
char str2[LEN];
cin>>str1;
cin>>str2;
int lenS=strlen(str1);
int lenT=strlen(str2);
int i,j;
while(j<lenT&&i<lenS){
if(str1[i]==str2[j]){
i++;
j++;
}
else{
i++;
}
}
if(j==lenT){
cout<<str2<<"是"<<str1<<"的子序列!";
}
else{
cout<<str2<<"不是"<<str1<<"的子序列!";
}
}
我的样例输出:
哈工大不是哈尔滨工业大学的子序列
我试着打印了一下母串跟字串的长度
分别是:
14
6
而打印出来的 j 是:
4199739