/* * C++ Program to Implement Z-Algorithm */ #include #include #include using namespace std; bool zAlgorithm(string pattern, string target) { string s = pattern + '$' + target; int n = s.length(); vector z(n, 0); int goal = pattern.length(); int r = 0, l = 0, i; for (int k = 1; k < n; k++) { if (k > r) { for (i = k; i < n && s[i] == s[i - k]; i++); if (i > k) { z[k] = i - k; l = k; r = i - 1; } } else { int kt = k - l, b = r - k + 1; if (z[kt] > b) { for (i = r + 1; i < n && s[i] == s[i - k]; i++); z[k] = i - k; l = k; r = i - 1; } } if (z[k] == goal) return true; } return false; } int main() { string tar = "san and linux training"; string pat = "lin"; if (zAlgorithm(pat, tar)) cout<<"'"<