【字符串子序列II】
给定字符串 target和 source,判断 target是否为 source 的子序列。你可以认为target和 source 中仅包含英文小写字母。
字符串 source 可能会很长(长度~=500,000),而 target是个短字符串(长度<=100)。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。
(例如,”abc”是”aebycd”的一个子序列,而”ayb”不是)。
请找出最后一个子序列的起始位置。
输入描述:
第一行为target,短字符串(长度 <=100)
第二行为source,长字符串(长度 ~= 500,000)
输出描述:
最后一个子序列的起始位置,即最后一个子序列首字母的下标
#include <stdio.h>
#include <string.h>
int IsSon(char *s1, char *s2)
{
int i, idx = 0;
for (i = 0; i < strlen(s1); i++) {
if (s1[i] == s2[idx]) {
idx++;
}
if (idx >= strlen(s2)) {
return 1;
}
}
return -1;
}
int main()
{
char s1[10000] = {0};
char s2[100] = {0};
gets(s1);
gets(s2);
int i, len1 = strlen(s1);
for (i = len1 - 1; i >= 0; i--) {
if (s1[i] == s2[0]) {
if (IsSon(s1 + i + 1, s2 + 1) == 1) {
printf("%d\n", i);
return 0;
}
}
}
printf("-1\n");
return 0;
}