1.题目描述
2. 思路分析
因为不区分大小写,所以可以将两个字符串a,b都转为小写(也可以都转为大写)。
然后要被查找的b字符串,可能会出现第二个样例中的情况,也就是字符串a是to,而字符串b的Ottoman,这样是不符合题意的。为了 解决这个问题,我们将字符串a首尾都加一个空格,同时将字符串b首尾都加一个空格(这里是为了让字符串b的首单词和尾单词前后均有空格)
然后就开始查找,一个字符串b查找另一个字符串a,我们可以使用s.find()函数,如果b.find(a)!=-1,说明能找到字符串a,否则说明找不到。
为了能持续找字符串b中的所有字符串a,我们用一个while循环,如果能找到,就每次从能找到的位置的下一个位置(也就是能找到的位置下标+1)开始找,并及时更新位置,同时计数。
3. 代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define endl '\n'
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
string a, b;
getline(cin, a);
getline(cin, b);
for (int i = 0; i < a.size(); i++) {
if (a[i] >= 'A' && a[i] <= 'Z') a[i] += 32;
}
for (int i = 0; i < b.size(); i++) {
if (b[i] >= 'A' && b[i] <= 'Z') b[i] += 32;
}
a = " " + a + " ";
b = " " + b + " ";
if (b.find(a) == -1) cout << -1 << endl;
else {
int st = b.find(a);
int tmp = st;
int cnt = 0;
while (tmp != -1) {
cnt++;
tmp = b.find(a, tmp + 1);
}
cout << cnt << " " << st << endl;
}
return 0;
}