let's start Code

Manachar’s Algorithm

resources:

HackerEarth

Tushar Roy 

Manacher's Algorithm - Finding all sub-palindromes 

IDeserve 

LeetCodeProblem

Visualize 

GFG 

Problems:

LPS - Longest Palindromic Substring 

CF blog  

Cf blog 2 

Build a Palindrome 

 Implementation:

#include <bits/stdc++.h>
using namespace std;
#define INF 1<<30
#define endl '\n'
#define maxn 1000005
#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;
/**___________________________________________________**/
const int N = 1e6 + 5;
int P[2 * N];
string convertToNewString(const string &s)
{
string nwS = "@";
for (int i = 0; i < (int)s.size(); i++) {
nwS += "#" + s.substr(i, 1);
}
nwS += "#$";
return nwS;
}
string lps(const string &s)
{
string Q = convertToNewString(s);
int c = 0, r = 0; /// current center, right limit
for (int i = 1; i < (int)Q.size() - 1; i++) {
// find the corresponding letter in the palindrome substring
int iMirror = c - (i - c);
if (r > i) {
P[i] = min(r - i, P[iMirror]);
}
// expanding around center i
while (Q[i + 1 + P[i]] == Q[i - 1 - P[i]]) {
P[i]++;
}
// update c,r in case if the palindrome centered at i expands past r
if (i + P[i] > r) {
c = i; // next center
r = i + P[i];
}
}
// Find the longest Palindrome length in p;
int maxPalindrome = 0;
int centerIndex = 0;
for (int i = 1; i < (int)Q.size() - 1; i++) {
if (P[i] > maxPalindrome) {
maxPalindrome = P[i];
centerIndex = i;
}
}
cout << maxPalindrome << "\n";
return s.substr((centerIndex - 1 - maxPalindrome) / 2, maxPalindrome);
}
int main()
{
FASTIO
///*
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
freopen("error.txt", "w", stderr);
#endif
//*/
//string s = "kiomaramol\n";
string s;
cin >> s;
cout << lps(s);
return 0;
}
view raw manachar.cpp hosted with ❤ by GitHub

Share:

Related Posts:

1 comment:

  1. Mens Black Titanium Wedding Band
    Mens Black titanium pans Titanium Wedding black titanium wedding bands Band titanium earrings is the sugarboo extra long digital titanium styler perfect wedding band titanium cost to have your ceremony ceremony started at a location near your own home. The band will

    ReplyDelete

About

let's start CODE

Popular Posts