题目:给定一个字符串,问是否能通过添加一个字母将其变为回文串。
输入描述:
一行一个由小写字母构成的字符串,字符串长度小于等于10。
输出描述:
输出答案(YES\NO).
输入例子1:
coco
输出例子1:
YES
解析:思路是求得最大的回文子串,然后看最大的回文子串是否等于字符串的长度减1,如果等于,返回YES,否则返回NO
import java.util.Scanner;
/**
* Created by HP on 2017/8/4.
*/
public class Main {
//ceabadd
//abba
public static String maxPalinedrom(String s){
int max=0;
int left=0,right=0;
for(int i=0;i<s.length();i++){//最大回文是奇数的情况
int leftIndex=i-1;
int rightIndex=i+1;
while (leftIndex>=0&&rightIndex<s.length()){
if(s.charAt(leftIndex)==s.charAt(rightIndex)){
leftIndex--;
rightIndex++;
}else {
break;
}
}
leftIndex++;
rightIndex--;
if((rightIndex-leftIndex+1)>=max){
max=rightIndex-leftIndex+1;
left=leftIndex;
right=rightIndex;
}
}
for(int i=0;i<s.length();i++){//最大回文是偶数的情况//abba
int leftIndex=i;
int rightIndex=i+1;
while (leftIndex>=0&&rightIndex<s.length()){
if(s.charAt(leftIndex)==s.charAt(rightIndex)){
leftIndex--;
rightIndex++;
}else {
break;
}
}
leftIndex++;
rightIndex--;
if((rightIndex-leftIndex+1)>=max){
max=rightIndex-leftIndex+1;
left=leftIndex;
right=rightIndex;
}
}
if(max==s.length()-1){
return "YES";
}
//return s.substring(left,right+1);//题目并不要求输出最大回文子串,但是可以求得的最大连续子回文子串
return "NO";
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
System.out.println(maxPalinedrom(sc.next()));
}
}
}