作者:手机用户2602921931 | 来源:互联网 | 2024-11-11 17:40
在LeetCode的“有效回文串II”问题中,给定一个非空字符串`s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。
Valid Palindrome II
Given a non-empty string s
, you may delete at most one character. Judge whether you can make it a palindrome.
Example 1:
Input: "aba"
Output: True
Example 2:
Input: "abca"
Output: True
Explanation: You could delete the character ‘c‘.
自己的做法:(很麻烦)
利用回文的特性,准备两个指针,left = 0, right = s.length() - 1
然后依次向中间移动,同时判断s.charAt(left) == s.charAt(right)
当遇到不等的地方,记录是第几次不等,flag = 0则进行下面的操作,否则是第二次的不等,直接返回false,
进行操作判断,如果s.charAt(left + 1) 和s.charAt(right)是否相同,此时还有一种情况就是 s.charAt(left) 和s.charAt(right - 1)也相同
这样就得分情况讨论 如下面的 2位置的 c 和后面的 u,以及他们对应的 u 和 c
mlcupuuffuupuculm
class Solution {
public boolean validPalindrome(String s) {
if(s == null || s.length() == 0) return true;
int left = 0;
int right = s.length() - 1;
int flag = 0;
while(left
discuss区看到比较简单的方法:是左边加1或者右边减1都考虑一下,进行或运算,结果就是了。
class Solution {
public boolean validPalindrome(String s) {
int i = 0, j = s.length() - 1;
while (i = j) return true;
if (isPalin(s, i + 1, j) || isPalin(s, i, j - 1)) return true;
return false;
}
private boolean isPalin(String s, int i, int j) {
while (i
*LeetCode--Valid Palindrome II