题目描述
输入两个字符串 S 和 L,都只包含英文小写字母。S 长度<=100,L 长度<=500,000
。
判定 S 是否是 L 的有效子串。
判定规则:
S 中的每个字符在 L 中都能找到(可以不连续),且 S 在L中字符的前后顺序与 S 中顺序要保持一致。
(例如,S=”ace”是 L=”abcde”的一个子序列且有效字符是 a、c、e,而”aec”不是有效子序列,且有效字符只有 a、e)
输入描述
输入两个字符串 S 和 L,都只包含英文小写字母。S 长度<=100,L 长度<=500,000
。
先输入 S,再输入 L,每个字符串占一行。
输出描述
S 串最后一个有效字符在 L 中的位置。(首位从 0 开始计算,无有效字符返回-1)
示例一
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
ace abcde
输出
4
示例二
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
fgh abcde
输出
-1
代码
#include <stdio.h> #include <string.h> int main() { char s[100]; char l[50000]; // 输入字符串 S scanf("%99s", s); // 输入字符串 L scanf("%49999s", l); // 比较字符串 S 和 L 中的字符 int i = 0, j = 0; while(i<strlen(s) && j<strlen(l)){ if(s[i]==l[j]){ i++; } j++; } // 判断是否找到字符串 S 在 L 中的位置 if(i==strlen(s)){ printf("%d\n",j-1); } else{ printf("-1\n"); } return 0; }