Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Longest Common Subsequence"
https://onlinejudge.u-aizu.ac.jp/problems/ALDS1_4_A
与えられた2つの文字列 X、Yに対して、最長共通部分列 Z の長さを出力するプログラムを作成してください。
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #ALDS1_10_C : Longest Common Subsequence
/* Aizu Online Judge in C++ #ALDS1_10_C : Longest Common Subsequence https://onlinejudge.u-aizu.ac.jp/problems/ALDS1_4_A 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; for(int i=0;i<n;i++){ string s,t; cin>>s>>t; int ss=s.size()-0; int ts=t.size()-0; vector<vector<int> > dp(ss+1,vector<int>(ts+1,0)); for(int i=0;i<ss;i++){ for(int j=0;j<ts;j++){ if(s[i]==t[j]){ dp[i+1][j+1]=max(dp[i+1][j+1],dp[i][j]+1); } dp[i+1][j+1]=max(dp[i+1][j+1],dp[i+1][j]); dp[i+1][j+1]=max(dp[i+1][j+1],dp[i][j+1]); } } cout<<dp[ss][ts]<<endl; } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/