欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)查找當(dāng)前字符串最大回文串代碼分享

 更新時間:2016年07月17日 21:49:26   投稿:hebedich  
本文給大家介紹的是如何使用Java實現(xiàn)查找當(dāng)前字符串最大回文串代碼,非常的簡單實用,有需要的小伙伴可以參考下

先看代碼

public class MaxHuiWen {
 
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    String s = "abb";
    MaxHuiWen(s);
  }
   
  //1.輸出回文串
  public static void MaxHuiWen(String s){
    //存儲字符串的長度
    int length = s.length();
    //存儲最長的回文串
    String MaxString = "";
    //遍歷當(dāng)前字符串的所有子串
    for(int i = 0 ; i < length ; i++){
      for(int j = i ; j < length + 1 ; j++){
        String s1 = s.substring(i , j);
        //如果當(dāng)前字符串為回文串并且大于MaxString的長度,就替換當(dāng)前MaxString
        if(HuiWen(s1) && s1.length() > MaxString.length()){
            MaxString = s1;
        }
        //System.out.println(s1);
      }
    }  
    //如果MaxString長度大于等于2,說明是回文串
    if(MaxString.length() >= 2){
      System.out.println(MaxString);
    }
    else{
      System.out.println("沒有回文串");
    }
     
  }
   
  //2.判斷字符串是否為回文串
  public static boolean HuiWen(String s){
    boolean flag = true;
    int length = s.length();
    char s1[] = s.toCharArray();
    //從前,從后,遍歷字符串,進(jìn)行比較
    for(int i = 0 , j = length - 1 ; i <= j ; i++ , j--){
      if(s1[i] != s1[j]){
        flag = false;
      }
    }
    return flag;
  }
   
}

一,字符串的回文判斷

判斷一個字符串是否為回文

問題描述,給定一個字符串,如String T="madam";要判斷該字符串是否為回文

方法一:1,定義兩個字符串元素指針(注意java沒有指針的概念),int right=T.length()-1 ;int left=0;

2,即left從左邊開始,right從右邊開始,依次比較所指的字符是否相等,若相等,則將left++,right--;否則,直接返回不是回文

while(left<right){

if(T.charAt(left)!=T.charAt(right))

return false;

left++;

right--;

}

return true;

代碼:

/* 
   * 3: 
   * 回文判斷 
   * 問題描述:回文,英文palindrome,指一個順著讀和反過來讀都一樣的字符串,比如madam、我愛我, 
   * 方法一: 
   * 分析:使用兩個"指針"分別從字符串頭和尾掃描,若每一個"指針"所指值都相等,這為回文 
   */ 
  public boolean isPalindrome(String s){ 
    if(s==null) 
      return false; 
    int left=0; 
    int right=s.length()-1; 
    while(left<right){ 
      if(s.charAt(left)!=s.charAt(right)) 
        return false; 
      left++; 
      right--; 
    } 
    return true; 
  } 


方法二:回文字符串如"madam",若將其全部反轉(zhuǎn),則還是得到其本身"madam",在將兩個字符串比較,若相等,則為回文

1,實現(xiàn)一個將字符串反轉(zhuǎn)的函數(shù)

/* 
 * 實現(xiàn)一個字符串的反轉(zhuǎn)函數(shù) 
 */ 
private String reverse(String str){ 
  String strResult=""; 
  for(int i=str.length()-1;i>=0;i--){ 
    strResult+=str.charAt(i); 
  } 
  return strResult; 
} 
2,對于目標(biāo)字符串s,首先將其反轉(zhuǎn)temp=reverse(s),然后在判斷temp.equals(s)
/*
* 將字符串倒置,再與原字符串進(jìn)行比較,若相等,則為回文,否則不是
* 算法時間復(fù)雜度為O(n)
*/
public boolean isPalindrome2(String s){
String temp=reverse(s);
if(s.equals(temp))
return true;
else
return false;
}

二:如何求一個給定字符串的最大回文字符串

例如,給定字符串String T="google",如何求其最長的回文子字符串"goog"

1,最簡單直接的想法就是:找出字符串的所有子串,然后判斷每一個子串是否是回文,并記錄,比較求出最大長度的回文,*算法時間復(fù)雜度為O(n^3)

/* 
 * 4,求最長回文子串 
 *問題描述:給定一個字符串求出其所有子串中最長的回文子串,例如google字符串,最長子串為goog 
 *分析: 
 *1,最簡單直接的想法就是:找出字符串的所有子串,然后判斷每一個子串是否是回文,并記錄,比較求出最大長度的回文 
 *算法時間復(fù)雜度為O(n^3) 
 */ 
public String longestPalindrome1(String s){ 
  String result=null; 
  String tempString=""; 
  //定義最長回文子串的長度 
  int max=0; 
  //遍歷字符串中的所有元素 
  for(int i=0;i<s.length();i++){ 
    //數(shù)組下標(biāo)指針j從字符串后面開始往前遍歷 
    for(int j=s.length()-1;j>i;j--){ 
      //判斷每一個字符串時候為回文 
      tempString=s.subStr( i, j+1); 
      //如果tempString是回文子串并且其長度(j-i+1)>max 
      if(isPalindrome(tempString)&&(j-i+1)>max){ 
        max=j-i+1; 
        result=subString(i, j+1); 
      } 
    } 
  } 
  return result; 
} 

2,第二種思路就是對于字符串中的每一個字符T[i],判斷 

以T[i],T[i+1]為中心的偶數(shù)長度子字符串是回文 

T[i]為中心的奇數(shù)長度子字符串是否是回文 

public String longestPalindrome2(String T){ 
    String result=null; 
    //存放最大回文字符串的長度 
    int max=0; 
    //遍歷每一個字符,以每一個字符為中心判斷奇偶擴(kuò)展子串 
    for(int i=0;i<T.length();i++){ 
      //定義兩個數(shù)組下標(biāo)指針,以i,i+1為中心的偶子序列 
      int pStart=i; 
      int pEnd=i+1; 
      while(pStart>=0&&pEnd<=(T.length()-1)&&T.charAt(pStart)==T.charAt(pEnd)){ 
        pStart--; 
        pEnd++; 
      } 
      //如果子字符串的長度>max,則暫存為最長子回文串 子回文串的長度=(pEnd-1)-(pStart+1)-1=pEnd-pStart-1 
      if(pEnd-pStart-1>max){ 
        max=pEnd-pStart-1; 
        result=subString( pStart+1, pEnd-1+1); 
      } 
       
      //以i為中心,判斷擴(kuò)展奇序列是否為回文串 
      pStart=i-1; 
      pEnd=i+1; 
      while(pStart>=0&&pEnd<=(T.length()-1)&&T.charAt(pStart)==T.charAt(pEnd)){ 
        pStart--; 
        pEnd++; 
      } 
      if (pEnd-pStart-1>max) { 
        max=pEnd-pStart-1; 
        result=subStrint(T, pStart+1, pEnd-1+1); 
      } 
    } 
    return result; 
  } 

相關(guān)文章

  • SpringBoot @ModelAttribute使用場景分析

    SpringBoot @ModelAttribute使用場景分析

    這篇文章主要介紹了SpringBoot @ModelAttribute使用場景分析,文中通過實例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • 利用MultipartFile實現(xiàn)文件上傳功能

    利用MultipartFile實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了利用MultipartFile實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 全面解析Java支持的數(shù)據(jù)類型及Java的常量和變量類型

    全面解析Java支持的數(shù)據(jù)類型及Java的常量和變量類型

    這篇文章主要介紹了Java支持的數(shù)據(jù)類型及Java的常量和變量類型,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-02-02
  • SpringMVC 文件上傳配置,多文件上傳,使用的MultipartFile的實例

    SpringMVC 文件上傳配置,多文件上傳,使用的MultipartFile的實例

    本篇文章主要介紹了SpringMVC 文件上傳配置,詳解介紹了如何使用SpringMVC進(jìn)行表單上的文件上傳以及多個文件同時上傳的步驟,有興趣的可以了解一下。
    2016-12-12
  • 詳解Eclipse Validating緩慢的優(yōu)化

    詳解Eclipse Validating緩慢的優(yōu)化

    這篇文章主要介紹了詳解Eclipse Validating緩慢的優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Spring實戰(zhàn)之緩存使用key操作示例

    Spring實戰(zhàn)之緩存使用key操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之緩存使用key操作,結(jié)合實例形式分析了Spring緩存使用key具體配置、屬性、領(lǐng)域模型等相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • 詳解MySQL事務(wù)日志undo log

    詳解MySQL事務(wù)日志undo log

    眾所周知,事務(wù)的一大特點是原子性,即同一事務(wù)的SQL要同時成功或者失敗,那大家有沒有想過在MySQL的innoDB存儲引擎中是如何保證這樣的原子性操作的,接下來就帶大家一探究竟,感興趣的小伙伴和小編一起來探討吧
    2023-07-07
  • Java在OJ時運行超時的問題解決方案

    Java在OJ時運行超時的問題解決方案

    Java語言什么都好,就是在OJ的時候真的是太慢了,今天來講解一種讓Java運行速度快速提高的方法,感興趣的朋友一起看看吧
    2023-11-11
  • SpringBoot實現(xiàn)PDF添加水印的示例

    SpringBoot實現(xiàn)PDF添加水印的示例

    本文主要介紹了SpringBoot實現(xiàn)PDF添加水印的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringBoot如何打印mybatis的執(zhí)行sql問題

    SpringBoot如何打印mybatis的執(zhí)行sql問題

    這篇文章主要介紹了SpringBoot如何打印mybatis的執(zhí)行sql問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論