Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <algorithm>
- int main() {
- std::string str, t;
- int s_size, t_size;
- std::cin >> str;
- s_size = str.size();
- std::cin >> t;
- str += '#';
- str += t;
- std::vector<size_t> z(s_size, 0);
- size_t l = 0, r = 0;
- for (size_t i = 1; i < str.size(); ++i) {
- size_t curZ = 0;
- if (i <= r) {
- curZ = std::min(r - i + 1, z[i - l]);
- }
- while (i + curZ < str.size() && str[curZ] == str[i + curZ]) {
- ++curZ;
- }
- if (i + curZ - 1 > r) {
- l = i;
- r = i + curZ - 1;
- }
- if (i < s_size) {
- z[i] = curZ;
- }
- if (i > s_size) {
- if (curZ == s_size) {
- std::cout << i - s_size - 1 << " ";
- }
- }
- }
- std::cout << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment