Particle

競技プログラミングについての雑記

AOJ 0528: Common Sub-String

共通部分文字列の長さの最大値を求める問題。
1文字後ろを調べ、同じ文字列を重複して調べないようにすると、TLEしないで解けます。
O(n^3)かO(n^2)です。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

string s,t;

int main(){
	while(cin>>s>>t){
		int ans = 0;
		for(int i = 0,ls = s.size(); i < ls; i++){
			for(int j = 0,lt = t.size(); j < lt; j++){
				if(i>0&&j>0&&s[i-1]==t[j-1])continue;
				int r = 0;
				for(int k = 0;i+k<ls&&j+k<lt;k++){
					if(s[i+k]!=t[j+k]){
						break;
					}
					r++;
				}
				ans = max(ans,r);
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}