Java實(shí)現(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){
//存儲(chǔ)字符串的長(zhǎng)度
int length = s.length();
//存儲(chǔ)最長(zhǎng)的回文串
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的長(zhǎng)度,就替換當(dāng)前MaxString
if(HuiWen(s1) && s1.length() > MaxString.length()){
MaxString = s1;
}
//System.out.println(s1);
}
}
//如果MaxString長(zhǎng)度大于等于2,說(shuō)明是回文串
if(MaxString.length() >= 2){
System.out.println(MaxString);
}
else{
System.out.println("沒(méi)有回文串");
}
}
//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;
}
}
一,字符串的回文判斷
判斷一個(gè)字符串是否為回文
問(wèn)題描述,給定一個(gè)字符串,如String T="madam";要判斷該字符串是否為回文
方法一:1,定義兩個(gè)字符串元素指針(注意java沒(méi)有指針的概念),int right=T.length()-1 ;int left=0;
2,即left從左邊開(kāi)始,right從右邊開(kāi)始,依次比較所指的字符是否相等,若相等,則將left++,right--;否則,直接返回不是回文
while(left<right){
if(T.charAt(left)!=T.charAt(right))
return false;
left++;
right--;
}
return true;
代碼:
/*
* 3:
* 回文判斷
* 問(wèn)題描述:回文,英文palindrome,指一個(gè)順著讀和反過(guò)來(lái)讀都一樣的字符串,比如madam、我愛(ài)我,
* 方法一:
* 分析:使用兩個(gè)"指針"分別從字符串頭和尾掃描,若每一個(gè)"指針"所指值都相等,這為回文
*/
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",在將兩個(gè)字符串比較,若相等,則為回文
1,實(shí)現(xiàn)一個(gè)將字符串反轉(zhuǎn)的函數(shù)
/*
* 實(shí)現(xiàn)一個(gè)字符串的反轉(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,對(duì)于目標(biāo)字符串s,首先將其反轉(zhuǎn)temp=reverse(s),然后在判斷temp.equals(s)
/*
* 將字符串倒置,再與原字符串進(jìn)行比較,若相等,則為回文,否則不是
* 算法時(shí)間復(fù)雜度為O(n)
*/
public boolean isPalindrome2(String s){
String temp=reverse(s);
if(s.equals(temp))
return true;
else
return false;
}
二:如何求一個(gè)給定字符串的最大回文字符串
例如,給定字符串String T="google",如何求其最長(zhǎng)的回文子字符串"goog"
1,最簡(jiǎn)單直接的想法就是:找出字符串的所有子串,然后判斷每一個(gè)子串是否是回文,并記錄,比較求出最大長(zhǎng)度的回文,*算法時(shí)間復(fù)雜度為O(n^3)
/*
* 4,求最長(zhǎng)回文子串
*問(wèn)題描述:給定一個(gè)字符串求出其所有子串中最長(zhǎng)的回文子串,例如google字符串,最長(zhǎng)子串為goog
*分析:
*1,最簡(jiǎn)單直接的想法就是:找出字符串的所有子串,然后判斷每一個(gè)子串是否是回文,并記錄,比較求出最大長(zhǎng)度的回文
*算法時(shí)間復(fù)雜度為O(n^3)
*/
public String longestPalindrome1(String s){
String result=null;
String tempString="";
//定義最長(zhǎng)回文子串的長(zhǎng)度
int max=0;
//遍歷字符串中的所有元素
for(int i=0;i<s.length();i++){
//數(shù)組下標(biāo)指針j從字符串后面開(kāi)始往前遍歷
for(int j=s.length()-1;j>i;j--){
//判斷每一個(gè)字符串時(shí)候?yàn)榛匚?
tempString=s.subStr( i, j+1);
//如果tempString是回文子串并且其長(zhǎng)度(j-i+1)>max
if(isPalindrome(tempString)&&(j-i+1)>max){
max=j-i+1;
result=subString(i, j+1);
}
}
}
return result;
}
2,第二種思路就是對(duì)于字符串中的每一個(gè)字符T[i],判斷
以T[i],T[i+1]為中心的偶數(shù)長(zhǎng)度子字符串是回文
T[i]為中心的奇數(shù)長(zhǎng)度子字符串是否是回文
public String longestPalindrome2(String T){
String result=null;
//存放最大回文字符串的長(zhǎng)度
int max=0;
//遍歷每一個(gè)字符,以每一個(gè)字符為中心判斷奇偶擴(kuò)展子串
for(int i=0;i<T.length();i++){
//定義兩個(gè)數(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++;
}
//如果子字符串的長(zhǎng)度>max,則暫存為最長(zhǎng)子回文串 子回文串的長(zhǎng)度=(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;
}
- 基于java查找并打印輸出字符串中字符出現(xiàn)次數(shù)
- java eclipse 整個(gè)項(xiàng)目或包查找只定字符串并替換操作
- 基于java查找最長(zhǎng)字符串代碼實(shí)例
- java 查找字符串所在的位置代碼
- java字符串常用操作方法(查找、截取、分割)
- Java字符串查找的三種方式
- java使用正則表達(dá)式查找包含的字符串示例
- java查找字符串中的包含子字符串的個(gè)數(shù)實(shí)現(xiàn)代碼
- Java的字符串中對(duì)子字符串的查找方法總結(jié)
- Java在長(zhǎng)字符串中查找短字符串的實(shí)現(xiàn)多種方法
相關(guān)文章
Spring?Boot?Admin?監(jiān)控指標(biāo)接入Grafana可視化的實(shí)例詳解
Spring Boot Admin2 自帶有部分監(jiān)控圖表,如圖,有線程、內(nèi)存Heap和內(nèi)存Non Heap,這篇文章主要介紹了Spring?Boot?Admin?監(jiān)控指標(biāo)接入Grafana可視化,需要的朋友可以參考下2022-11-11
利用Java實(shí)現(xiàn)輕松解析DNS報(bào)文
這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)輕松解析DNS報(bào)文,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2023-11-11
網(wǎng)關(guān)Spring Cloud Gateway HTTP超時(shí)配置問(wèn)題
這篇文章主要介紹了網(wǎng)關(guān)Spring Cloud Gateway HTTP超時(shí)配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Java String類詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java String類詳解,本文經(jīng)多方資料的收集整理和歸納,最終撰寫(xiě)成文,非常不錯(cuò),值得收藏,需要的的朋友參考下2017-04-04
Java服務(wù)中的大文件上傳和下載優(yōu)化技巧分享
在Java服務(wù)中處理大文件的上傳和下載是一項(xiàng)常見(jiàn)但復(fù)雜的任務(wù),為了提供優(yōu)秀的用戶體驗(yàn)和高效的系統(tǒng)性能,我們將探索多種策略和技術(shù),并在每一點(diǎn)上都提供代碼示例以便實(shí)戰(zhàn)應(yīng)用,需要的朋友可以參考下2023-10-10

