给定一个字符串,问是否能够通过增加一个字母将其变成“回文串”。“回文串”是指正着和反着读都一样的字符串,如:"aa","bob","testest"是回文串,"alice"、"time"都不是回文串。
输入:一行一个由小写字母构成的字符串,字符串长度不超过10。
输出:如果字符串可以通过增加一个字符成为回文串,则输出“YES",否则,输出”NO"。
样例输入:coco
样例输出:YES
解答思路:在字符串的每个位置,用'a'-'z'的每个字符,尝试构成回文串,成功返回"YES",否则,结束时返回"NO"
java代码实现如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
String s = null;
while(cin.hasNextLine()){
s = cin.nextLine();
String str = detectString(s);
System.out.println(str);
}
cin.close();
}
public static boolean isPipeline(String s){
char[] arr = s.toCharArray();
boolean flag = true;
for(int i=0; i<(arr.length+1)/2; i++){
if(arr[i]!=arr[arr.length-1-i]){
flag = false;
return flag;
}
}
return flag;
}
public static String detectString(String s){
if(s==null || s.length()>10){
return null;
}
int ch = 'a';
for(int j=0; j<s.length(); j++){
for(int i=0; i<26; i++ ){
int addChar = ch + i;
if(isPipeline(s.substring(0,j) + (char)addChar
+ s.substring(j))){
return "YES";
}else if(isPipeline("" + (char)addChar + s)){
return "YES";
}
else if(isPipeline(s + (char)addChar)){
return "YES";
}
}
}
return "NO";
}
}
上述实现,是在没有考虑算法效率的基础上实现的,本人本机编译器上测试通过,但是,在赛码网上测试用例通过率却为0%,并未提示说TLE,因此,希望大家能有更好的思路提供,并且指导下通过率为0%的原因。