有一天,小明在游戏中获得了一串数字,直觉告诉他这不是一串普通的数字串,或许可以破解一些关于网易的秘密。破解的第一步,他很想知道,在这串数字中,最多可以挑出多少个’9706’串。挑选的规则为:
(1)挑出的数字’9’,’7’,’0’,’6’在原串中可以不连续,但是数字的先后顺序不能改变
(2)使用过的数字不能被再次使用。如’123901370997606’可以最多挑出2个’9706’,而’6079’则无法挑出任何一个’9706’。
输入
第一行是整数T(T <= 100),表示下面有T组数据。之后T行,每行为一组数据,每组数据为一个字符串。每个字符串的长度L <= 50000。每个字符串只会包含数字[‘0’…’9’]。
输出
输出T行,每行对应一个数据的输出结果,表示字符串最多能挑出多少个’9706’。
样例输入
4
6097
97069706
997776600069
123901370997606
样例输出
0
2
1
2
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int group = 0;
char **pContent;
cin >> group;
pContent = new char*[group];
for (int i = 0; i < group; ++i)
{
pContent[i] = new char[50000];
}
for (int i = 0; i < group; ++i)
{
cin >> pContent[i];
}
vector<int> vec;
for (int i = 0; i < group; ++i)
{
int size = strlen(pContent[i]);
int k = 0;
int num = 0;
while (k < size)
{
vec.clear();
for (int j = k;j < size; ++j)
{
if (pContent[i][j] == '9'
&& vec.size() == 0)
{
vec.push_back(j);
}
else if (pContent[i][j] == '7'
&& vec.size() == 1)
{
vec.push_back(j);
}
else if (pContent[i][j] == '0'
&& vec.size() == 2)
{
vec.push_back(j);
}
else if (pContent[i][j] == '6'
&& vec.size() == 3)
{
vec.push_back(j);
break;
}
}
if (vec.size() == 4)
{
num++;
for (int z = 0; z < 4; ++z)
{
pContent[i][vec[z]] = -1;
}
}
if (!vec.empty())
{
k = vec[0] + 1;
}
else
{
break;
}
}
cout << num << endl;
}
return 0;
}
结果为: