您的位置:首页 > 其它

JAV打印字符串中最大的回文子串

2010-10-28 13:30 399 查看
import java.util.*;

/**
* 打印字符串中最大的回文子串
* 时间复杂度O(n power 3),空间复杂度O(1)
* @author HUOYIN
* @version 1.0 2010-10-28 上午11:19:14
*
*/
public class EchoString {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.print("Please input a string: ");
String str = scan.nextLine();

int start = 0, length = 1;
int p = 0, q = 0;

for (int i = 0; i < str.length() - length; i++) {
p = i;
for (int j = str.length() - 1; j > i; j--) {
q = j;
while (str.charAt(p) == str.charAt(q) && p < q) {
p++;
q--;
}
if (p > i && (p == q || q == p - 1) && (j-i+1)>length) {
start = i;
length = j - i + 1;
} else {
p=i;
}
}
}
System.out.println("the max-length palindrome: " + str.substring(start, start+length));
}
}

import java.util.*;

/**
* 打印字符串中最大的回文子串
* 时间复杂度O(n power 2),空间复杂度O(1)
* @author HUOYIN
* @version 1.0 2010-10-28 上午11:19:14
*
*/
public class MaxPalindrome {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.print("Please input a string: ");
String str = scan.nextLine();

int start = 0, maxlength = 1, j=0;

for (int i = 0; i < str.length()-1-maxlength/2; i++) {
//even palindrome determination
for(j = 0; (i-j)>=0 && (i+j+1)<str.length(); j++) {
if(str.charAt(i-j)!=str.charAt(i+j+1)) {
break;
}
}

if(j*2>maxlength) {
maxlength=j*2;
start=i-j+1;
}

//odd palindrome determination
for(j = 1; (i-j)>=0 && (i+j)<str.length(); j++) {
if(str.charAt(i-j)!=str.charAt(i+j)) {
break;
}
}
j--;

if((j*2+1)>maxlength) {
maxlength=j*2+1;
start=i-j;
}
}
System.out.printf("(start)=%d, (maxlength)=%d, (the max-length palindrome string)=/"%s/"/n", start, maxlength, str.substring(start, start+maxlength));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐