【算法千题案例】每日LeetCode打卡——88. 验证回文字符串 Ⅱ

简介: 📢前言🌲原题样例: 验证回文字符串 Ⅱ🌻C#方法:贪心算法🌻Java 方法:贪心💬总结

📢前言

🚀 算法题 🚀

🌲 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程😜

🌲 提示:本专栏解题 编程语言一律使用 C# 和 Java 两种进行解题

🌲 要保持一个每天都在学习的状态,让我们一起努力成为算法大神吧🧐!

🌲 今天是力扣算法题持续打卡第88天🎈!

🚀 算法题 🚀

🌲原题样例: 验证回文字符串 Ⅱ

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

示例1:

输入: s = "aba"
输出: true

示例2:

输入: s = "abca"
输出: true
解释: 你可以删除c字符。

示例3:

输入: s = "abc"
输出: false

提示:

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


🌻C#方法:贪心算法

与判断简单回文的变体类似,只不过在遇到不同的字符时再分为两种情况去判断是否为回文子串

  • 要么前面的指针跳一位(p1+1)
  • 要么后面的指针跳一位(p2-1)

代码:

public class Solution {
    public bool ValidPalindrome(string s) {
        return IsPalindrome(s,0,s.Length-1,false);
    }
    public bool IsPalindrome(string str, int p1, int p2, bool omited)
        {
            if (p1 >= p2) return true;
            if (str[p1] == str[p2]) return IsPalindrome(str, p1 + 1, p2 - 1, omited);
            else if (str[p1] != str[p2] && omited == false)
                return IsPalindrome(str, p1 + 1, p2, true) || IsPalindrome(str, p1, p2 - 1, true);
            else return false;
        }
}

执行结果

通过
执行用时:88 ms,在所有 C# 提交中击败了77.50%的用户
内存消耗:50.1 MB,在所有 C# 提交中击败了6.50%的用户

🌻Java 方法:贪心

思路解析

image.png

image.png

代码:

class Solution {
    public boolean validPalindrome(String s) {
        int low = 0, high = s.length() - 1;
        while (low < high) {
            char c1 = s.charAt(low), c2 = s.charAt(high);
            if (c1 == c2) {
                ++low;
                --high;
            } else {
                return validPalindrome(s, low, high - 1) || validPalindrome(s, low + 1, high);
            }
        }
        return true;
    }
    public boolean validPalindrome(String s, int low, int high) {
        for (int i = low, j = high; i < j; ++i, --j) {
            char c1 = s.charAt(i), c2 = s.charAt(j);
            if (c1 != c2) {
                return false;
            }
        }
        return true;
    }
}

执行结果

通过
执行用时:7 ms,在所有 Java  提交中击败了41.41%的用户
内存消耗:38.8 MB,在所有 Java 提交中击败了94.40%的用户

复杂度分析

时间复杂度:O( n )
空间复杂度:O(1)

💬总结

  • 今天是力扣算法题打卡的第八十八天!
  • 文章采用 C#Java 两种编程语言进行解题
  • 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们
  • 那今天的算法题分享到此结束啦,明天再见!


相关文章
|
3月前
|
数据采集 机器学习/深度学习 算法
|
1月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
60 0
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
38 0
|
11天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
25天前
|
存储 算法 搜索推荐
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
27 1
|
1月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
1月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
23 2
|
1月前
|
算法 数据可视化 新制造
Threejs路径规划_基于A*算法案例完整版
这篇文章详细介绍了如何在Three.js中完整实现基于A*算法的路径规划案例,包括网格构建、路径寻找算法的实现以及路径可视化展示等方面的内容。
59 0
Threejs路径规划_基于A*算法案例完整版
|
1月前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
11 0
|
1月前
|
存储 算法 机器人
Threejs路径规划_基于A*算法案例V2
这篇文章详细介绍了如何在Three.js中使用A*算法进行高效的路径规划,并通过三维物理电路的实例演示了路径计算和优化的过程。
58 0