题目1535:重叠的最长子串

    xiaoxiao2021-04-16  30

    题目描述:

    给定两个字符串,求它们前后重叠的最长子串的长度,比如"abcde"和“cdefg”是"cde",长度为3。

    输入:

    输入可能包含多个测试案例。 对于每个测试案例只有一行, 包含两个字符串。字符串长度不超过1000000,仅包含字符'a'-'z'。

    输出:

    对应每个测试案例,输出它们前后重叠的最长子串的长度。

    样例输入: abcde cdefg 样例输出:

    3

    #include<stdio.h> #include<string.h> using namespace std; char vn[1000005], vm[1000005]; int vnlen, vmlen; bool match(int i) { int j = i; while(i<vnlen) { if (vn[i] != vm[i-j]) return false; i++; } return true; } int main() { while (~scanf("%s%s",vn, vm))//scanf死活不能AC { vnlen = strlen(vn); vmlen = strlen(vm); bool f = true; int i=vnlen>vmlen?vnlen-vmlen:0; for (; i < vnlen; i++) if (vn[i] == vm[0] && match(i)) { printf("%d\n", vnlen - i); f = false; break; } if (f) printf("0\n"); } return 0; } /************************************************************** Problem: 1535 User: 午夜小白龙 Language: C++ Result: Accepted Time:200 ms Memory:2972 kb ****************************************************************/

    /

    很简单,不细说了,不过有两个细节值得注意。

    一是:前面字符串比后面字符串长时,不能交换顺序,比如abcfg 和abc重复子串就为0,abc和abcfg重复子串为3

    二是:用scanf死活AC不了,改成~scanf就好了,我也不知道为什么啊

    转载请注明原文地址: https://ju.6miu.com/read-672301.html

    最新回复(0)