剑指OfferII019.最多删除一个字符得到回文

题目

给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。

示例 1:输入: s = "aba" 输出: true

示例 2:输入: s = "abca" 输出: true

解释: 可以删除 "c" 字符 或者 "b" 字符

示例 3:输入: s = "abc" 输出: false

提示:1 <= s.length <= 105

s 由小写英文字母组成

注意:本题与主站 680 题相同

解题思路分析

1、双指针;时间复杂度O(n),空间复杂度O(1)

剑指OfferII019.最多删除一个字符得到回文

func validPalindrome(s string) bool {
   i := 0
   j := len(s) - 1
   for i < j {
      if s[i] != s[j] {
         return isPalindrome(s, i, j-1) || isPalindrome(s, i+1, j)
      }
      i++
      j--
   }
   return true
}

func isPalindrome(s string, i, j int) bool {
   for i < j {
      if s[i] != s[j] {
         return false
      }
      i++
      j--
   }
   return true
}

2、递归;时间复杂度O(n),空间复杂度O(n)

func validPalindrome(s string) bool {
   length := len(s)
   if length < 2 {
      return true
   }
   if s[0] == s[length-1] {
      return validPalindrome(s[1 : length-1])
   }
   return isPalindrome(s[0:length-1]) || isPalindrome(s[1:length])
}

func isPalindrome(s string) bool {
   i := 0
   j := len(s) - 1
   for i < j {
      if s[i] != s[j] {
         return false
      }
      i++
      j--
   }
   return true
}

总结

Easy题目,题目同leetcode 680.验证回文字符串 Ⅱ

展开阅读全文

页面更新:2024-05-15

标签:回文   递归   字符   本题   复杂度   示例   字符串   指针   题目   思路   提示   时间   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top