nyoj 5 Binary String Matching
2016-04-11 21:16
239 查看
这道题的意思是给2个字符串a和b,计算a在b中出现的次数。
比如:
111
11101111011
111就在字符串中出现了3次,在b中出现的3次的下标分别为0,1,2;4,5,6;5,6,7;
用常规的字符串匹配算法就能解决。
#include <iostream>
#include <string>
using namespace std;
int cut_string(string a,string b);
int main()
{
string a, b;
int i;
cin >> i;
while (i--)
{
int sum;
cin >> a >> b;
sum = cut_string(a,b);
cout << sum << endl;
}
return 0;
}
int cut_string(string a, string b)
{
int i = 0;
int sum = 0;
int j = 0;
while (i < b.size() && j < a.size() )
{
if (b[i] == a[j])
{
if (j == a.size() - 1)
{
i = i - j + 1;
j = 0;
sum++;
}
else
{
i++;
j++;
}
}
else
{
i = i - j + 1;
j = 0;
}
}
return sum;
}
比如:
111
11101111011
111就在字符串中出现了3次,在b中出现的3次的下标分别为0,1,2;4,5,6;5,6,7;
用常规的字符串匹配算法就能解决。
#include <iostream>
#include <string>
using namespace std;
int cut_string(string a,string b);
int main()
{
string a, b;
int i;
cin >> i;
while (i--)
{
int sum;
cin >> a >> b;
sum = cut_string(a,b);
cout << sum << endl;
}
return 0;
}
int cut_string(string a, string b)
{
int i = 0;
int sum = 0;
int j = 0;
while (i < b.size() && j < a.size() )
{
if (b[i] == a[j])
{
if (j == a.size() - 1)
{
i = i - j + 1;
j = 0;
sum++;
}
else
{
i++;
j++;
}
}
else
{
i = i - j + 1;
j = 0;
}
}
return sum;
}