题目描述
输入两个字符串 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 <iostream>
using namespace std;
int func(const string& s, const string& t)
{
int i = 0;
int j = 0;
int res = -1;
while (i < s.size() && j < t.size()) {
if (s[i] == t[j]) {
i++;
res = j;
}
j++;
}
return res;
}
int main()
{
string strS;
string strL;
cin >> strS;
cin >> strL;
std::cout << func(strS, strL) << std::endl;
return 0;
}