Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication1.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <cmath>
- //#include <bits/stdc++.h>
- #include <math.h>
- #include <algorithm>
- using namespace std;
- typedef long long ll;
- ll dp[10100][1000], a[1000], b[1000], ans[1000];
- string s, t;
- int main()
- {
- cin >> s >> t;
- s = " " + s + " ";
- for (int i = 1; i < s.size(); i++)
- for (int j = 0; j < t.size(); j++)
- {
- if (s[i] == t[j])
- dp[i][j]++;
- dp[i + 1][j] = dp[i][j];
- }
- for (int i = 1; i < s.size(); i++)
- for (int j = 0; j < t.size(); j++)
- if (s[i] == t[j])
- if ((j == 0 || a[j - 1]) && !a[j])
- {
- a[j] = i;
- break;
- }
- reverse(s.begin(), s.end());
- reverse(t.begin(), t.end());
- for (int i = 1; i < s.size(); i++)
- for (int j = 0; j < t.size(); j++)
- if (s[i] == t[j])
- if ((j == 0 || b[j - 1]) && !b[j])
- {
- b[j] = s.size() - i - 1;
- break;
- }
- reverse(s.begin(), s.end());
- reverse(t.begin(), t.end());
- reverse(b, b + t.size());
- for (int i = 0; i < t.size(); i++)
- if (a[i] != -1 && b[i] != -1)
- ans[i] = dp[b[i]][i] - dp[a[i]][i] + 1;
- ll mn = 0;
- for (int i = 1; i < t.size(); i++)
- {
- if (ans[i] < ans[mn])
- mn = i;
- //cout << a[i] << ' ' << b[i] << ' ' << ans[i] << endl;
- }
- for (int i = a[mn], j = 0; i <= b[mn] - j && i < s.size(); i++)
- {
- if (s[i] == t[mn])
- {
- s.erase(i, 1);
- j++;
- i--;
- }
- }
- s.erase(0, 1);
- s.erase(s.size() - 1, 1);
- cout << s << endl;
- system("pause");
- return 0;
- }
- /*
- abbacc
- abc
- abfoaoaaabaaaoaaa
- faboa
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement