#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
bool is_sub_valid(const string &str, const string &sub)
{
size_t pos = 0;
size_t next = 0;
size_t sub_len = sub.length();
int cnt = 0;
while (true)
{
pos = str.find(sub, next);
if (pos == string::npos) break;
next = pos + sub_len;
cnt++;
if (cnt > 1) break;
}
return cnt>1?true:false;
}
int main()
{
string str;
unordered_set<string> valid_sub;
while (true)
{
cin >> str;
if (str == "#") break;
size_t len = str.length();
for (size_t i = 0; i < len; i++)
{
for (size_t j = i; j < len; j++)
{
if ((j - i + 1) > len / 2) break;
const string &sub = str.substr(i, j - i + 1);
if (!is_sub_valid(str, sub)) break;
valid_sub.insert(sub);
}
}
cout << valid_sub.size()<<endl;
valid_sub.clear();
}
}
HDU 3518 Boring counting 的C++解法
最新推荐文章于 2018-10-15 15:16:47 发布