字符串序列判定

文章目录

  • 题目描述
  • 判定规则:
  • 输入描述
  • 输出描述
  • 示例一
  • 示例二
  • 代码

题目描述

输入两个字符串 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 
#include 

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;
}

你可能感兴趣的:(刷题,c语言,算法)