java函数中查找回文的错误



leetcode 680https://leetcode.com/problems/valid-palindrome-ii/要求在最多删除一个字符后找到一个回文。我写了下面的代码,但结果是字符串"失败了;aguokepatgbnvfqmgmlcpuufxoohdfpgjdmysgvhmvffcnqxjjxqncffvmhvgsymdjgpfdhooxfuupucummgqfvnbgtapekouga";因为在进入函数返回false的外部else情况的结束程序中,r值变为80。这个程序通过了大多数测试,所以我不确定这个程序有什么问题。

public boolean validPalindrome(String s) {
int l = 0, r = s.length() - 1;
boolean deleted = false;
while (l < r) {
System.out.println(s.charAt(l));
if (s.charAt(l) == s.charAt(r)) {
l++;
r--;
} else if (!deleted) {
deleted = true;
if (s.charAt(l + 1) == s.charAt(r)) {
l++;
} else if (s.charAt(l) == s.charAt(r - 1)) {
r--;
} else {
return false;
}
} else {
return false;
}
}
return true;
}

此测试失败,因为您假设中只有两个条件之一

if (s.charAt(l + 1) == s.charAt(r)) {
l++;
} else if (s.charAt(l) == s.charAt(r - 1)) {
r--;

是真的。在给定的测试用例中,当l=19r=81都为true时,您需要决定应用哪一个
为了证明问题,更改两个条件的顺序:

if (s.charAt(l) == s.charAt(r-1)) {
r--;
} else if (s.charAt(l+1) == s.charAt(r)) {
l++;

更改并没有解决问题,只是演示而已。

(你可能会发现这很有帮助:什么是调试器,它如何帮助我诊断问题?(

相关内容

最新更新