有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10。想检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即,S1的右边界点在S2的左边界点的左侧)。计算满足上述条件的最大跨距(即,最大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目)。如果没有满足条件的S1,S2存在,则输出-1。输入 abcd123ab888efghij45ef67kl ab ef 输出18c++代码
时间: 2024-02-13 10:05:50 浏览: 100
计算字符串长度 和 判断两个字符串是否相同
下面是C++代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
int main() {
string S, S1, S2;
cin >> S >> S1 >> S2;
int lenS = S.length(), lenS1 = S1.length(), lenS2 = S2.length();
int leftS2 = lenS, ans = -1; // 初始化ans为-1,表示不存在满足条件的S1和S2
for (int i = lenS - 1; i >= 0; i--) {
if (i + lenS2 <= leftS2 && S.substr(i, lenS2) == S2) { // 判断S2是否出现在S中且满足不交叉条件
leftS2 = i; // 更新S2的起始位置
}
else if (i + lenS1 <= leftS2 && S.substr(i, lenS1) == S1) { // 判断S1是否出现在S中且满足不交叉条件
ans = max(ans, leftS2 - i - lenS1); // 计算最大间隔距离
}
}
cout << ans << endl;
return 0;
}
```
代码思路:
从S的末尾开始往前遍历,分别用substr函数检测S2和S1是否出现在S中且满足不交叉条件。每次更新S2的起始位置leftS2,并计算S1和S2之间的最大间隔距离ans。最后输出ans即可。
阅读全文