九度 oj 題目1555:重複子串

http://ac.jobdu.com/problem.php?pid=1555

這道題覺得還可以再優化,暫時先水過了。


#include <iostream>
#include <string>
#include <set>
using namespace std;
#define rep(i,j,k) for(int i=j;i<=k;i++)
string s;

int cal(string s)
{
	set<string> uniq;
	int len = s.size();
	rep(i, 0, len - 1) rep(j, i + 1, len)
	{
		string sub = s.substr(i, j - i);
		//string suffix = s.substr(j);
		string::size_type idx = s.find(sub,j);
		if (idx != string::npos) {
			uniq.insert(sub); // cout << sub << endl;
		}
		else break; //第一次沒過,差了一個剪枝
	}
	return uniq.size();
}

int main()
{
	while (cin >> s)
	{
		cout << cal(s) << endl;
	}
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章