原題連結:https://www.luogu.com.cn/problem/P1308
題意解讀:給定單詞a,文字b,在b中找a的個數,並找a第一次出現的位置,注意b中任何位置可能含有多個連續空格。
解題思路:
透過雙指標找b中每一個單詞的首、尾位置i,j,與a進行一一比較即可。
注意1:比較時不考慮大小寫,可以統一轉成小寫字元tolower()
注意2:如果寫比較函式,不要把文字b作為引數傳遞,否則會超時,除非加引用string &b
注意3:輸入要用getline(cin, str)
100分程式碼:
#include <bits/stdc++.h>
using namespace std;
string a, b;
int cnt = 0, first = -1, pos = 0;
//判斷a與b[l]~b[r-1]是否相等
bool cmp(int l, int r)
{
if(a.size() != r - l) return false;
for(int i = 0; i < a.size(); i++)
{
if(tolower(a[i]) != tolower(b[l + i]))
return false;
}
return true;
}
int main()
{
getline(cin, a);
getline(cin, b);
for(int i = 0; i < b.size(); i++)
{
if(b[i] != ' ') //找到一個單詞的首字元
{
int j = i;
while(b[j] != ' ' && j < b.size()) j++; //找到一個單詞的末尾+1的位置
if(cmp(i, j))
{
cnt++;
if(first == -1) first = i;
}
i = j;
}
}
if(cnt > 0) cout << cnt << " " << first;
else cout << -1;
return 0;
}