AcWing 778. 字符串最大跨距
原题链接
简单
作者:
Saber__
,
2024-10-29 14:52:52
,
所有人可见
,
阅读 2
#include <iostream>
using namespace std;
int main()
{
string s,s1,s2;
char c;
while(cin >> c, c != ',') s += c;
while(cin >> c, c != ',') s1 += c;
while(cin >> c) s2 += c;
if(s.size() < s1.size() || s.size() < s2.size()) puts("-1");
else
{
//找到从左边起第一个s1,和右边起第一个s2
int l;
for(l = 0; l + s1.size() <= s.size(); ++l)
{
//从l的位置,枚举子串,与s1比较
int k = 0;
for(;k < s1.size();++k)
{
//不相等直接枚举下一位置开始的子串
if(s[l + k] != s1[k]) break;
}
//如果相等,说明找到了相等的子串
if(k == s1.size()) break;
}
//找到右边起第一个s2
int r; //从这位置开始枚举,才够枚举完s2的长度
for(r = s.size() - s2.size(); r >= 0; --r)
{
//从当前位置往后枚举,找相等子串
int k = 0;
for(;k < s2.size(); ++k)
{
if(s[r + k] != s2[k]) break;
}
//找到当前位置直接出去
if(k == s2.size()) break;
}
//从s1的尾部到s2的头部之间的距离
l += s1.size() -1;
if(l >= r) puts("-1");
else cout<< r - l - 1 <<endl;
}
return 0;
}