Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- set<string> getLCS(string &s, string &t){
- vector<vector<int>> dp(s.size(), vector<int>(t.size(), 0));
- int maxi = 0;
- for (int i = 0; i < s.size(); ++i){
- for (int j = 0; j < t.size(); ++j){
- if(s[i]!=t[j]){
- continue;
- }
- dp[i][j] = (i == 0 || j == 0) ? 1 : 1 + dp[i - 1][j - 1];
- if(dp[i][j]>maxi){
- maxi = dp[i][j];
- }
- }
- }
- for (int i = 0; i < s.size(); ++i){
- for (int j = 0; j < t.size(); ++j){
- // cout << dp[i][j] << " ";
- }
- // cout << endl;
- }
- set<string> result;
- for (int i = 0; i < s.size(); ++i){
- int start = -1;
- string maxi = "";
- for (int j = 0; j < t.size(); ++j){
- if(j+i<t.size() && j<s.size()){
- if(dp[j][j+i]!=0){
- if(start==-1){
- start = j;
- }
- maxi = s.substr(start, j - start + 1);
- // cout << maxi << " -- ";
- }
- else{
- start = -1;
- if(maxi.size()!=0){
- result.insert(maxi);
- maxi = "";
- }
- }
- }
- }
- if (maxi.size() != 0)
- {
- result.insert(maxi);
- maxi = "";
- }
- }
- // cout << endl;
- for (int i = 0; i < s.size(); ++i)
- {
- int start = -1;
- string maxi = "";
- for (int j = 0; j < t.size(); ++j)
- {
- if (j + i < s.size() && j<t.size())
- {
- if(dp[j+i][j]!=0){
- if(start==-1){
- start = j;
- }
- maxi = t.substr(start, j - start + 1);
- // cout << maxi << " -- ";
- }
- else{
- start = -1;
- if (maxi.size() != 0)
- {
- result.insert(maxi);
- maxi = "";
- }
- }
- }
- }
- if (maxi.size() != 0)
- {
- result.insert(maxi);
- maxi = "";
- }
- }
- return result;
- }
- int main() {
- string s, t;
- cin >> s >> t;
- set<string> ans = getLCS(s, t);
- for(auto s : ans){
- cout << s << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement