【发布时间】:2021-12-28 19:54:38
【问题描述】:
问题:
给定一个范围为 ascii[a-z] 的小写字母字符串,确定要删除的字符索引以将字符串更改为回文。如果字符串无法转换为回文或已经是回文,则返回 -1 否则返回要删除的字符的索引。
我的解决方案:
public static int palindromeIndex(String s) {
if(p(s)){
return -1;
}
StringBuilder sb = new StringBuilder(s);
for(int i=0; i<s.length(); i++){
sb.deleteCharAt(i);
if(p(sb.toString())){
return i;
}
sb.insert(i,s.charAt(i));
}
return -1;
}
private static boolean p(String s){
for(int i=0; i<s.length()/2; i++){
if(s.charAt(i) != s.charAt(s.length() - i - 1)){
return false;
}
}
return true;
}
根据hackerrank,以下一个或所有测试用例失败(无法确定是哪一个):
- quyjjdcgsvvsgcdjjyq
- hgygsvlfwcwnswtuhmyaljkqlqjjqlqkjlaymhutwsnwcflvsgygh
- fgnfnidynhxebxxxfmxixhsruldhsaobhlcggchboashdlurshxixmfxxxbexhnydinfngf
- bsyhvwfuesumsehmytqioswvpcbxyolapfywdxeacyuruybhbwxjmrrmjxwbhbyuruycaexdwyfpaloyxbcpwsoiqtymhesmuseufwvhysb
- fvyqxqxynewuebtcuqdwyetyqqisappmunmnldmkttkmdlnmnumppasiqyteywdquctbeuwenyxqxqyvf
- mmbiefhflbeckaecprwfgmqlydfroxrblulpasumubqhhbvlqpixvvxipqlvbhqbumusaplulbrxorfdylqmgfwrpceakceblfhfeibmm
- tpqknkmbgasitnwqrqasvolmevkasccsakvemlosaqrqwntisagbmknkqpt
- lhrxvssvxrhl
- prcoitfiptvcxrvoalqmfpnqyhrubxspplrftomfehbbhefmotfrlppsxburhyqnpfmqlaorxcvtpiftiocrp
- kjowoemiduaaxasnqghxbxkiccikxbxhgqnsaxaaudimeowojk
我的输出:
- 1
- 8
- 33
- 23
- 24
- 43
- 20
- -1
- 14
- -1
我在本地调试代码,根据我的理解,这个测试用例运行良好。请帮我解释一下,代码有什么问题。
注意:我可以用其他替代方法(更简单的方法)来解决,在线提供解决方案,但我试图了解我的一段 java 代码有什么问题。谢谢。
【问题讨论】:
-
你可以用一种更简单的方式来做到这一点:修改回文测试,以便在双向扫描时计算不匹配,并且只容忍一个(你可以使用索引来达到这个目的)。
-
您的代码通过了提交! ..但未通过测试用例 7、12、14,原因是:超时!所以它看起来“正确”!但可能会“更有效率”! ;)
-
尝试“线性”算法以支持“二次”算法... (-> discussions)
标签: java algorithm logic reverse palindrome