题目:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
我的代码

class Solution:def validPalindrome(self, s: str) -> bool:# 分三种情况:不删字符是回文字符串,删一个字符是回文字符串,不是回文字符串if s == s[::-1]:return True# 双指针low = 0high = len(s) - 1while low < high:if s[low] != s[high]:# 只需要判断删除后的字符是否是回文字符串# 删除右边字符temp1 = s[low:high]# 删除左边字符temp2 = s[low+1:high+1]if temp1 == temp1[::-1]:return Trueelif temp2 == temp2[::-1]:return Trueelse:return Falseelse:low += 1high -= 1

时间复杂度:O(N)
空间复杂度:O(N)
别人的代码

利用 ~i 将i的二进制补码按位取反
关于二进制补码的介绍
正数:正数的原码、反码、补码都一样(后面以8位bit下的值为例)首位符号位代表正负
2的原码:0000 0010 首位符号位0表示正数
2的反码:0000 0010
2的补码:0000 0010
~2表示对2的补码按位取反:1111 1101

负数:负数的反码、补码需要计算
-3的原码:1000 0011 首位符号位-1表示负数
-3的反码:1111 1100 首位符号位不变,其余各位取反
-3的补码:1111 1101 反码+1
~(-3)表示对-3的补码取反:0000 0010

所以
~2 =1111 1101 = -3
~(-3) = 0000 0010 = 2
综上所述:~i = -(i+1)
总结
1.正数的正码、反码、补码是一致的
2.负数的反码-首位符号位变不变,其余各位取反;负数的补码:反码+1
3.计算机的数字运算是基于补码的

class Solution:def validPalindrome(self, s: str) -> bool:# 正常回文字符串n = len(s)w = n // 2if s == s[::-1]:return True# 利用~判断非正常字符串  ~i = -(i+1)for i in range(w):if s[i] != s[~i]:j = len(s) - 1 - i h = (j-i)//2# 分别删除第一个或最后一个字符串return s[i:i+h] == s[j-1:j-h-1:-1] or s[i+1:i+h+1] == s[j:j-h:-1]

力扣每日一刷--- 验证回文字符串II(非严格) 以及取反知识相关推荐

  1. 力扣--125验证回文串/680验证回文字符串II

    125验证回文串 python代码 常规 def isPalindrome(s):if len(s) < 2:return TruesList = []s = s.lower()print(s) ...

  2. 把数组排成最小的数字,划分字母区间,最小覆盖子串,验证回文字符串II

    面试题45:把数组排成最小的数字 输入一个正整数数组,把数组里所有的数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.这里自定义了一个排序规则. class Solution { publi ...

  3. 验证回文字符串 II(贪心+双指针)

    面对该题我们最最容易想到的算法就是暴力,我一开始也是没注意看该题的数据大小 直接暴力-- 首先判断原串是否是回文串,如果是,就返回 true:如果不是,则枚举每一个位置作为被删除的位置,再判断剩下的字 ...

  4. 2022-1-13 Leetcode 680.验证回文字符串 II

    class Solution {public:bool validPalindrome(string s) {int n = s.size();// for(int i = 0;i < n/2; ...

  5. 1706. 球会落何处 / 680. 验证回文字符串 Ⅱ

    1706. 球会落何处[中等题][每日一题] 思路: 单看每一行,必须是小球所在的列跟它左右两侧至少有一侧的挡板方向相同才能使小球滚动下去,否则就卡住了,具体点说就是,设小球当前所在列下标为i,那么如 ...

  6. 680. 验证回文字符串 Ⅱ golang

    题目 验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "a ...

  7. 680. 验证回文字符串 Ⅱ

    680. 验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: s = "aba" 输出: true 示例 2: 输入: s ...

  8. [Leedcode][JAVA][第680题][验证回文字符串Ⅱ][贪心][递归]

    [问题描述][第680题][验证回文字符串Ⅱ][简单] 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串.示例 1:输入: "aba" 输出: True 示例 2 ...

  9. 20190821:(leetcode习题)验证回文字符串

    验证回文字符串 题目 大致思路 代码实现 题目 大致思路 首先明确什么是回文字符串: 正序和反序读,是一回事的句子,就是回文字符串 当然,你得把里面除了数字和字母的元素去掉,比如逗号啊,句号啊,之类的 ...

  10. leetcode系列--680.验证回文字符串 Ⅱ

    leetcode系列–第680题.验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 输入: s = "abca" 输出: true 解释: ...

最新文章

  1. memcached实现集群中的session共享存储优缺点
  2. 【飞秋】一起学Windows Phone7开发(十三.四 基本控件)
  3. VMware ESXI 虚拟磁盘工具 - vmkfstools 使用实例
  4. cocos2dx 屏幕适配
  5. sklearn一般流程
  6. 为什么前端工程师很少用Visual Studio?
  7. java知识点3(null)
  8. c改java_如何将一个c程序改写成JAVA程序
  9. (三)JavaScript之[事件]与[字符串]
  10. 【UE4学习】01——UE4下载与安装
  11. matlab画平滑曲线的两种方法
  12. python罗马数字转换,Python 罗马数字转换整数
  13. python 前后端分离框架_聊聊前后端分离的架构方法
  14. 麻省理工学院公开课:单变量微积分
  15. 捋一捋dubbo配置
  16. 为什么要设置HashMap的初始化容量
  17. uniapp一套代码打包两个APP 安装失败,提示:与已安装应用签名不同,该文件包与具有同一名称的现有文件包存在冲突
  18. 南宁师范大学计算机考研资料汇总
  19. hangfire-快速入门
  20. spring开发_邮箱注册_激活_获取验证码

热门文章

  1. poj 3714 Raid
  2. 2012/7/9Intel面试题目
  3. 【react】 redux 公共状态管理---数据的渲染,数据的修改,再把修改的数据渲染到当前组件...
  4. Hibernate---简介
  5. Qt5.3.2(VS2010)_调试_进入Qt源码
  6. 转载:SPFA算法学习
  7. windows下如何安装pip
  8. 【三十二】thinkphp之连接数据库、实例化模型
  9. BMap:JavaScript API
  10. input表单的type属性详解,不同type不同属性之间区别