@shady... The first approach with a slight modification will solve the
above mentioned problem... I have modified the previous to show the
same..

The innermost 'If' statement needs to be modified to ensure that
the found substring which is present in both the originalStr
and reverseStr doesn't overlap based on their respective indices
and length of the found substring.. // NOTE- Earlier we had to ensure
that they overlap, for the palindrome problem..
The below code basically gets the max even length substring
whose reverse is also part of the origStr and doesn't overlap..
I have added comments to show where to break, in case all we need
to do is find whether it contains such an even substring..
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 < pRev)
               // We need to check for the case where the
reverse               // substring is placed before the orig substring
as its symmetric..               {
                      currMax = X[pStrt];
                      // In case u r just looking for any even length
substring
                      // then break out from the entire loop..
               }
        }
        else
           X[pStrt] = 0;
    }
    pRev -- ;
}
On Dec 29, 5:20 pm, shady <sinv...@gmail.com> wrote:
> oh, i didn't read all the posts, anyway i have understood lucifier's O(n^2)
> time solution.
>
> and ya what's the solution for this question?
> Given a string of length N, find whether there exits an even length
>  reverse substring of a substring.
>
>
>
>
>
>
>
> On Thu, Dec 29, 2011 at 2:23 PM, atul anand <atul.87fri...@gmail.com> wrote:
>
> > @shady : lets go with this one:-
>
> > given string = *abcdrdcba
>
> > abcd != dcba  -  not a palindrome
> > **abcd != dcba - **not a palindrome *
> > *
> > *no even length palindrome found for the given string.
>
> > given string = ab*cddc*abr
>
> > even lenght palindrome found = cddc
>
> > if another even length palindrome found report the longest one.
>
> >  --
> > 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