/*
字符串最大跨距
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
有三個字符串S,S1,S2,其中,S長度不超過300,S1和S2的長度不超過10,想檢測S1和S2是否同時在S中出現,且S1位於S2的左邊,並在 S中互不交叉(即,S1的右邊界點在S2的左邊界點的左側)。計算滿足上述條件的最大跨距(即,最大間隔距離:最右邊的S2的起始點與最左邊的S1的終止 點之間的字符數目)。如果沒有滿足條件的偶對S1,S2存在,則輸出 -1
例如,S = "abcd123ab888efghij45ef67kl", S1="ab", S2="ef",其中,S1在S中出現了2次,S2也在S中出現了2次,最大跨距則爲:18
輸入
三個串:S1, S2, S3,其間以逗號間隔(注意,S1, S2, S3中均不含逗號);
輸出
S1和S2在S最大跨距;若在S中沒有滿足條件的S1和S2,則輸出-1
樣例輸入
abcd123ab888efghij45ef67kl,ab,ef
樣例輸出
18
*/
<pre name="code" class="cpp">find返回的是第一次出現ab的a的下標
find_last_of返回的是最後一次出現ef的f的下標
<pre name="code" class="cpp">#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str,first,last;
int begin,end;
getline(cin,str,',');
getline(cin,first,',');
cin >> last;
if ((str.find(first)==string::npos)||(str.find(last)==string::npos))
cout << -1;//判斷是否能在S中找到S1或S2
else {
begin=str.find(first)+first.size()-1;//查找S1第一次出現位置
end=str.find_last_of(last)-last.size()+1;//查找S2最後一次出現位置
if (end-begin-1<0) cout << -1;//判斷s1是否在s2左面
else cout << end-begin-1;
}
//system("pause");
return 0;
}