import org.apache.commons.lang.StringUtils;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
String str = "ysadbasgqkweys";
StringBuilder sb = new StringBuilder();
getPalindrome(str, sb);
System.out.println("初始字符串:"+str);
System.out.println("获得回文:"+sb.toString());
System.out.println("需要移除的字符数:"+ (str.length() - sb.toString().length()));
}
/**获得回文**/
private static void getPalindrome(String str, StringBuilder pStr){
if(StringUtils.isBlank(str)){
return;
}
str = str.replace(" ", "");
//判断是否为回文
if(isPalindrome(str)){
pStr.append(str);
return;
}
//获得字符串各字符重复数
Map<String, Integer> map = getMap(str);
//计算
for(char c : str.toCharArray()){
String key = c + "";
Integer value = map.get(key);
if(value == null || value < 2){
continue;
}
int fast = str.indexOf(key);//首次出现位置
int last = str.lastIndexOf(key);//获得最后出现位置
String splitStr = str.substring(fast, (last+1));
if(isPalindrome(splitStr)){
pStr.append(splitStr);
break;
}
palindrome(splitStr, pStr);
if(StringUtils.isNotBlank(pStr.toString())){
break;
}
}
}
private static void palindrome(String str, StringBuilder pStr){
Map<String, Integer> map = getMap(str);
for(char c : str.toCharArray()){
String key = c+"";
Integer value = map.get(key);
if(value != 1){
continue;
}
str = str.replace(key, "");
if(isPalindrome(str)){
pStr.append(str);
break;
}
}
}
private static Map<String, Integer> getMap(String str){
Map<String, Integer> map = new HashMap<String, Integer>();
if(StringUtils.isBlank(str)){
return map;
}
for(char c : str.toCharArray()){
String key = c+"";
Integer value = map.get(key);
if(value == null){
value = 0;
}
map.put(key, (value + 1));
}
return map;
}
/**
* 是否为回文
* @param str
* @return
*/
private static boolean isPalindrome(String str){
return StringUtils.equals(str, reverse(str));
}
/**
* 反转
* @param str
* @return
*/
private static String reverse(String str){
return new StringBuilder(str).reverse().toString();
}
}