#include <bits/stdc++.h> using namespace std; #define INF 1<<30 #define endl '\n' #define maxn 100005 #define tc printf("Case %d: ", cs) #define tcn printf("Case %d:\n", cs); #define FASTIO ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); typedef long long ll; const double PI = acos(-1.0); #define dbg1(x) cerr << #x << " = " << x << endl; #define dbg2(x, y) cerr << #x << " = " << x << ", " << #y << " = " << y << endl; #define dbg3(x, y, z) cerr << #x << " = " << x << ", " << #y << " = " << y << ", " << #z << " = " << z << endl; #define dbg4(w,x, y, z) cerr << #w << " = " << w << ", " <<#x << " = " << x << ", " << #y << " = " << y << ", " << #z << " = " << z << endl; template < typename F, typename S > ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; } template < typename T > ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{"; for (auto it = v.begin(); it != v.end(); ++it) { if ( it != v.begin() ) os << ", "; os << *it; } return os << "}"; } template < typename T > ostream &operator << ( ostream & os, const set< T > &v ) { os << "["; for (auto it = v.begin(); it != v.end(); ++it) { if ( it != v.begin()) os << ", "; os << *it; } return os << "]"; } template < typename F, typename S > ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "["; for (auto it = v.begin(); it != v.end(); ++it) { if ( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; } return os << "]"; } #define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0) clock_t tStart = clock(); #define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC) void faltu () { cerr << endl; } template <typename T> void faltu( T a[], int n ) { for (int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; } template <typename T, typename ... hello> void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); } // Program showing a policy-based data structure. #include <ext/pb_ds/assoc_container.hpp> // Common file #include <ext/pb_ds/tree_policy.hpp> #include <functional> // for less #include <iostream> using namespace __gnu_pbds; using namespace std; // GNU link : https://goo.gl/WVDL6g typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> new_data_set; /**___________________________________________________**/ // Function to find longest substring of given string containing // k distinct characters using sliding window string longestSubstr(string str, int k, int n) { int End = 0, Begin = 0; unordered_set<char> window; int freq[128] = {0}; for (int l = 0, r = 0; r < n; r++) { window.insert(str[r]); freq[str[r] - 'a']++; while ((int)window.size() > k) { if (--freq[str[l] - 'a'] == 0) window.erase(str[l]); l++; } if (End - Begin < r - l) { End = r; Begin = l; } } return str.substr(Begin, End - Begin + 1); } void findAllanagrams1(string s, string t) { int n = s.length(); int m = t.length(); if (m > n) return; /// for count current window character unordered_multiset<char> window; // maintain count of character in 2nd string unordered_multiset<char> sec; for (int i = 0; i < (int)t.length(); i++) sec.insert(t[i]); for (int i = 0; i < n; i++) { if (i < m) window.insert(s[i]); else { if (window == sec) { cout << "Angram " << s.substr(i - m, m) << " present at index " << (i - m) << "\n"; } auto it = window.find(s[i - m]); if (it != window.end()) window.erase(it); window.insert(s[i]); } } if (window == sec) { cout << "Angram " << s.substr(n - m, m) << " present at index " << (n - m) << "\n"; } } void findAllanagrams2(string s, string t) { int n = s.length(); int m = t.length(); if (m > n) return; for (int i = 0; i <= n - m; i++) { if (is_permutation(s.begin() + i, s.begin() + i + m, t.begin())) { cout << "Angram " << s.substr(i, m) << " present at index " << i << "\n"; } } } void longestSubString() { string str = "abcbdbdbbdcdabd"; int k = 2; int n = str.length(); cout << longestSubstr(str, k, n) << endl; } void allSubstringPermutation() { string s = "XYYZXZYZXXYZ"; string t = "XYZ"; findAllanagrams1(s, t); cout << "''''''''''''''''''''''\n"; findAllanagrams2(s, t); } int main() { FASTIO ///* #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); freopen("error.txt", "w", stderr); #endif //*/ longestSubString(); allSubstringPermutation(); }