@atul
The loop runs are correct..

Yes, it works fine for "abccba" giving out 6 as the max length of even
palindrome which is nothing but the entire string..


On Dec 29, 4:16 pm, atul anand <atul.87fri...@gmail.com> wrote:
> @Lucifer : in your first approach ...
>
> i guess outer loop should start from 1 and inner loop should move n to 1..
>
> in the given algo both outer and inner loop move from N to 1.
>
> will your algo work for this case??
>
> string = abccba
> i.e when given string itself is longest even length palindrome.
>
>
>
>
>
>
>
> On Wed, Dec 28, 2011 at 3:05 PM, Lucifer <sourabhd2...@gmail.com> wrote:
> > Algo:
> > -----------
> > Take the reverse of the given string and find the continuous matching
> > substring of even length in the orig and rev str.
>
> > We need to take care of certain corner cases such as:
> > Say orig str = abadba
> > rev str = abdaba
>
> > On finding the continuous substring we will get "ab" which is not a
> > palindrome..
> > Hence to handle such cases we need need to also keep track of the
> > following:
> > 1) No. of chars matched.
> > 2) The start of the substring in orig str.
> > 3) The start of the substring in rev str when read from right to
> > left..
>
> > The above algo can be used to find all the following:
> > 1) Whether there is an even length palindrome
> > 2) Whether there is an odd length palindrome
> > 3) Longest even length palindrome
> > 4) Longest odd length palindrome
> > 5) Longest palindrome.
>
> > The below code is for longest even length palindrome.
> > I have added a comment in the code to show where to break if we just
> > want to find whether it has an even palindrome.
>
> > Time complexity is O(N^2)..
> > Space complexity O(N) ...
> > // It can as well be done in O(n^2) space but i don't see a benefit of
> > doing so..Hence, reduced it to O(N)..
>
> > Lets take an array X[N+1] and initialize it to 0.
>
> > The array will be used to record whether there is a palindrome of even/
> > odd length ending at index OrigStr[i] and RevStr[j]..
>
> > Lets say R(i, j) = length of continuous matching substring which ends
> > at OrigStr[i] and RevStr[j]..
>
> > Hence, the recurrence would be,
> > R(i,j) = 1 + R(i-1,j-1) , if OrigStr[i] == RevStr[j]
> >        = 0, otherwise
>
> > If R(i,j) is even and greater than the current recorded longest even
> > palindrome,
> > then check the following before making the current max..(basically to
> > ensure the validity for corner cases)
>
> > // 1 - based index for ease of understanding..
> > // Basically checking for the start indices as explained above
> > say the substring length is K..
> > If ( i - k + 1 == N - j + 1) then assign it to current max
> >                                   otherwise its not a palindrome..
>
> > Code: ( written based on 1-based indexing)
> > ----------
> > char OrigStr[N];
>
> > for (int i =0; i < N+1 ; ++i)
> >   X[i] = 0;
>
> > int pStrt = 1; // to mimic the orig str
> > int pRev = N;  // to mimic the rev str
>
> > int currMax = 0;
>
> > while ( pRev > 0)
> > {
> >  for ( pStrt = N; pStrt >=1 ; --i)
> >  {
> >     if ( OrigStr[pStrt] == OrigStr[pRev] )
> >     {
> >        X[pStrt] = 1 + X[pStrt - 1];
> >        if ( (X[pStrt] % 2 == 0) &&
> >             (currMax < X[pStrt]) &&
> >              (pStrt - X[pStrt] + 1 == pRev)
> >        {
> >            currMax = X[pStrt];
> >           // In case u r looking for any even length palindrome
> >           // then break out from the entire loop..
> >           // Also, if u want to find the exact characters u can do so
> > by storing
> >           // pStrt in a variable.. Using the currMax and pStrt you
> > can get the
> >           // exact palindrome..
> >        }
> >     }
> >     else
> >        X[pStrt] = 0;
> >  }
> >  pRev -- ;
> > }
>
> > On Dec 28, 10:57 am, sumit mahamuni <sumit143smail...@gmail.com>
> > wrote:
> > > Here I can think of O( n * log n ). can anyone think of better solution??
>
> > > On Tue, Dec 27, 2011 at 11:06 PM, atul007 <atul.87fri...@gmail.com>
> > wrote:
> > > > Given a string of length N, find whether there exits an even length
> > > > palindrome substring.
> > > > what would be efficient way of solving this problem.?
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > Groups
> > > > "Algorithm Geeks" group.
> > > > To post to this group, send email to algogeeks@googlegroups.com.
> > > > To unsubscribe from this group, send email to
> > > > algogeeks+unsubscr...@googlegroups.com.
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/algogeeks?hl=en.
>
> > > --
> > > Thanks and Regards,
> > > Sumit Mahamuni.
>
> > > -- Slow code that scales better can be faster than fast code that doesn't
> > > scale!
> > > -- Tough times never lasts, but tough people do.
> > > -- I love deadlines. I like the whooshing sound they make as they fly
> > by. -
> > > D. Adams
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Algorithm Geeks" group.
> > To post to this group, send email to algogeeks@googlegroups.com.
> > To unsubscribe from this group, send email to
> > algogeeks+unsubscr...@googlegroups.com.
> > For more options, visit this group at
> >http://groups.google.com/group/algogeeks?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to