题目
c语言暴力解法
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
char * longestPalindrome ( char * s) {
int len= strlen ( s) ;
if ( len< 2 ) {
return s;
}
int maxlen= 1 ;
int begin= 0 ;
int i= 0 , j= 0 ;
char * arr= ( char * ) malloc ( sizeof ( char ) * 1001 ) ;
for ( i= 0 ; i< len- 1 ; i++ ) {
for ( j= i+ 1 ; j< len; j++ ) {
if ( j- i+ 1 > maxlen && validPalindromic ( s, i, j) ) {
maxlen= j- i+ 1 ;
begin= i;
}
}
}
s[ begin+ maxlen] = '\0' ;
return s+ begin;
}
int validPalindromic ( char * s, int left, int right) {
while ( left < right)
{
if ( s[ left] != s[ right] )
{
return 0 ;
}
left++ ;
right-- ;
}
return 1 ;
}
int main ( )
{
printf ( "请输入字符串 " ) ;
char * s;
s= ( char * ) malloc ( sizeof ( char ) ) ;
gets ( s) ;
printf ( "%s\n" , s) ;
printf ( "最长回文子串:%s:\n" , longestPalindrome ( s) ) ;
return 0 ;
}
java暴力解法
package huiwenzichuan;
public class huiwenzichuan {
public String longestPalindrome ( String s) {
int len= s. length ( ) ;
if ( len< 2 ) {
return s;
}
int maxlen= 1 ;
int begin= 0 ;
char [ ] charArray= s. toCharArray ( ) ;
for ( int i= 0 ; i< len- 1 ; i++ ) {
for ( int j= i+ 1 ; j< len; j++ ) {
if ( j- i+ 1 > maxlen && validPalindromic ( charArray, i, j) ) {
maxlen= j- i+ 1 ;
begin= i;
}
}
} return s. substring ( begin, begin+ maxlen) ;
}
private boolean validPalindromic ( char [ ] charArray, int left, int right) {
while ( left< right) {
if ( charArray[ left] != charArray[ right] ) {
return false ;
}
left++ ;
right-- ;
}
return true ;
}
public static void main ( String[ ] args) {
huiwenzichuan heap1 = new huiwenzichuan ( ) ;
String s;
s= "abbacbbca" ;
System. out. print ( heap1. longestPalindrome ( s) ) ;
}
}
c语言中心扩散法
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
char * longestPalindrome ( char * s) {
int len= strlen ( s) ;
if ( len< 2 ) {
return s;
}
int maxlen= 1 ;
int begin= 0 ;
int i;
for ( i= 0 ; i< len; i++ ) {
int oddlen= expandAroundCenter ( s, i, i) ;
int evenlen= expandAroundCenter ( s, i, i+ 1 ) ;
int curmaxlen= ( oddlen> evenlen? oddlen: evenlen) ;
if ( curmaxlen> maxlen) {
maxlen= curmaxlen;
begin= i- ( maxlen- 1 ) / 2 ;
}
}
s[ begin+ maxlen] = '\0' ;
return s+ begin;
}
int expandAroundCenter ( char * s, int left, int right) {
int len= strlen ( s) ;
int i= left; int j= right;
while ( i>= 0 && j< len) {
if ( s[ i] == s[ j] ) {
i-- ;
j++ ;
} else {
break ;
}
}
return j- i- 1 ;
}
int main ( )
{
printf ( "请输入字符串 " ) ;
char * s;
s= ( char * ) malloc ( sizeof ( char ) ) ;
gets ( s) ;
printf ( "%s\n" , s) ;
printf ( "最长回文子串:%s:\n" , longestPalindrome ( s) ) ;
return 0 ;
}
java中心扩散法
package huiwenzichuan;
public class huiwenzichuan1 {
public String londesePalindrome ( String s) {
int len= s. length ( ) ;
if ( len< 2 ) {
return s;
}
int maxlen= 1 ;
int begin= 0 ;
char [ ] charArray= s. toCharArray ( ) ;
for ( int i= 0 ; i< len- 1 ; i++ ) {
int oddlen= expandAroundCenter ( charArray, i, i) ;
int evenlen= expandAroundCenter ( charArray, i, i+ 1 ) ;
int curMaxlen= Math. max ( oddlen, evenlen) ;
if ( curMaxlen > maxlen) {
maxlen= curMaxlen;
begin= i- ( maxlen- 1 ) / 2 ;
}
}
return s. substring ( begin, begin+ maxlen) ;
}
private int expandAroundCenter ( char [ ] charArray, int left, int right) {
int len= charArray. length;
int i= left; int j= right;
while ( i>= 0 && j< len) {
if ( charArray[ i] == charArray[ j] ) {
i-- ;
j++ ;
} else {
break ;
}
}
return j- i- 1 ;
}
public static void main ( String[ ] args) {
huiwenzichuan1 heap1 = new huiwenzichuan1 ( ) ;
String s;
s= "abbacbbca" ;
System. out. print ( heap1. londesePalindrome ( s) ) ;
}
}