package cn.dlpu.lby;
public class TiqusubString {
/*
* 串“abcba”以字母“c”为中心左右对称;串“abba” 是另一种模式的左右对称。
* 这两种情况我们都称这个串是镜像串。特别地,只含有1个字母的串,可以看成是第一种模式的镜像串。
* 一个串可以含有许多镜像子串。我们的目标是求一个串的最大镜像子串(最长的镜像子串),
* 如果有多个最大镜像子串,对称中心靠左的优先选中。例如:“abcdeefghhgfeiieje444k444lmn
* ”的最大镜像子串是:“efghhgfe”
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abcdeefghhgfeiieje444k444lmn";
System.out.println(getMaxString(str));
}
private static String getMaxString(String str) {
// TODO Auto-generated method stub
String max_string = "";
for (int i = 0; i < str.length(); i++) {
// 第一种模式
int step = 1;
try{
for (;;) {
if (str.charAt(i - step) != str.charAt(i + step))
break;
step++;
}
}catch (Exception e) {
}
String s1 = str.substring(i - step + 1, i + step);
// 第二种模式
step = 0;
try{
for (;;) {
if (str.charAt(i - step) != str.charAt(i + step+1))
break;
step++;
}
}catch(Exception e){
}
String s2 = str.substring(i - step+1, i + step+1);
if(s1.length()>max_string.length())
max_string = s1;
if(s2.length()>max_string.length())
max_string = s2;
}
return max_string;
}
}
提取字串
最新推荐文章于 2022-03-13 16:19:01 发布