最长回文字串(JAVA实现)

来源:互联网 发布:好用的会计软件 编辑:程序博客网 时间:2024/06/18 14:20

题目描述:

给定一个字符串,求它的最长回文字串;

解法:遍历字符串的所有字串,

for(int i=0; i<length; i++) //遍历当前字符串的所有子串{for(int j=i; j<length+1; j++){String str1 = str.substring(i,j);//调用java中截取字符串的方法substring()                         }                 }
然后对每一个字串进行判断,是否为回文串;

public static boolean Huiwen(String s){   boolean flag=True;   int length=str.length();   char str1[]=str.toCharArray();   for(int i=0,j=length-1;i<=j;i++,j--)     //判断方式是从两段进行对比,不相同则不问回文串,相同则为回文串   {        if(str1[i]!=str1[j])        {                flag=false;         }    }    return flag;}
最后判断是否为最长回文串;

代码实现如下:

package Test.com;import java.util.Scanner;public class LongestPalindrome {/** * @param args */public static void main(String[] args) {Scanner s = new Scanner(System.in);String str=null;        System.out.println("请输入你要输入的字符串:");str = s.next();MaxHuiwen(str);}public static void MaxHuiwen(String str){int length=str.length();  //存储字符串的长度String MaxStr="";         //存储最长的字符串for(int i=0; i<length; i++) //遍历当前字符串的所有子串{for(int j=i; j<length+1; j++){String str1 = str.substring(i,j);//调用java中截取字符串的方法substring()if(Huiwen(str1)&&str1.length()>MaxStr.length()) //如果当前字符串为回文串并且大于MaxStr的长度,则替换当前的回文串{MaxStr=str1;}}}if(MaxStr.length()>=2){System.out.println(MaxStr);}else{System.out.println("没有回文子串");}}public static boolean Huiwen(String str)  //判断字符串是否为回文{boolean flag=true;int length=str.length();char str1[]=str.toCharArray();for(int i=0,j=length-1;i<=j;i++,j--){if(str1[i]!=str1[j]){flag=false;}}return flag;}}
编程之法中使用了中心扩展法,以某个字符为中心,判断字符左边和右边是否相同。
public static String MaxHuiWen(String s)  {  String result=null;  int max=0;  for(int i=0;i<s.length();i++)  {     int pLeft=i;     int pRight=s.length()-1;     while(pLeft>=0&&pRight<=(s.length()-1)&&s.charAt(pLeft)==s.charAt(pRight))     {     pLeft++;     pRight--;    }     if(pRight-pLeft-1>max)     {     max=pRight-pLeft-1;     result= s.substring(pLeft+1,pRight-1+1);     }     pLeft=i-1;     pRight=i+1;     while(pLeft>=0&&pRight<=(s.length()-1)&&s.charAt(pLeft)==s.charAt(pRight))     {     pLeft++;     pRight--;    }     if(pRight-pLeft-1>max)     {     max=pRight-pLeft-1;     result= s.substring(pLeft+1, pLeft);     }     }  return result;  }