力扣刷题百天计划 Day10 验证回文字符串 Ⅱ C#

学习目标:

我会持续更新我独特的算法思路,希望能给大家带来不一样的思维拓展!
如果大家感觉有帮助的话,欢迎点赞关注支持哦!
你们的鼓励是我坚持下去的动力!
!!!

力扣题库第680题 官方链接

学习内容:

验证回文字符串 Ⅱ

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:

输入: s = “aba”
输出: true
示例 2:

输入: s = “abca”
输出: true
解释: 你可以删除c字符。
示例 3:

输入: s = “abc”
输出: false

提示:

1 <= s.length <= 105
s 由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome-ii

学习时间:

2022.1.19


学习产出:

思路一
在这里插入图片描述

解题思路
双指针法

扫描二维码关注公众号,回复: 14066408 查看本文章

1.首先确定双指针,left指向0,right指向字符串最后一个字符。
2.题目是要求验证回文子串,所以,我们可以很方便的通过双指针去判断左右两个指针指向的字符是否相等
3.我们判断左指针指向的字符和右指针指向的字符是否相等,如果相等,则left++,right–,然后继续判断,判断结束条件就是left不再小于right,代表此时两个指针指向同一个元素
4.如果指向的字符不同,那么就不是回文串。但是题目给了我们一个机会,一个删除一个字符的机会,那么我们应该删left指向的这个,还是right?答案是,都试试
5.我们将left指向的字符删掉,然后判断此时left+1到right这个子串是不是回文串,如果是,则整个字符串就是回文串
6.我们将right指向的字符删掉,然后判断此时left到right-1这个子串是不是回文串,如果是,则整个字符串就是回文串

public class Solution {
    
    
    public bool ValidPalindrome(string s) {
    
    
        if(s.Length==1)return true;

        int left=0;
        int right=s.Length-1;

        while(left<right){
    
    
            if(s[left]!=s[right]){
    
    
                 return isValid(s,left+1,right)||isValid(s,left,right-1);
            }
            left++;
            right--;
        }
        return true;

        bool isValid(string s,int left,int right){
    
    
            while(left<right){
    
    
                if(s[left++]!=s[right--]){
    
    
                    return false;
                }
            }
            return true;
        }
    }
}

作者:荷兰猪小灰灰
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/m0_48781656/article/details/122586485