leetcode1542_go_找出最长的超赞子字符串

题目

给你一个字符串 s 。请返回 s 中最长的 超赞子字符串 的长度。

「超赞子字符串」需满足满足下述两个条件:

该字符串是 s 的一个非空子字符串

进行任意次数的字符交换后,该字符串可以变成一个回文字符串

示例 1:输入:s = "3242415" 输出:5

解释:"24241" 是最长的超赞子字符串,交换其中的字符后,可以得到回文 "24142"

示例 2:输入:s = "12345678" 输出:1

示例 3:输入:s = "213123" 输出:6

解释:"213123" 是最长的超赞子字符串,交换其中的字符后,可以得到回文 "231132"

示例 4:输入:s = "00" 输出:2

提示:1 <= s.length <= 10^5

s 仅由数字组成

解题思路分析

1、前缀和+位运算;时间复杂度O(n),空间复杂度O(1)

leetcode1542_go_找出最长的超赞子字符串

func longestAwesome(s string) int {
   res := 0
   n := len(s)
   m := make(map[int]int) // 保存每个状态第1次出现的下标
   m[0] = -1              // 0对应的下标
   cur := 0
   for i := 0; i < n; i++ {
      value := int(s[i] - '0')
      cur = cur ^ (1 << value)
      if index, ok := m[cur]; ok { // 相同的情况
         res = max(res, i-index)
      } else {
         m[cur] = i
      }
      for j := 0; j < 10; j++ { // 相差1位的情况
         if index, ok := m[cur^(1< b {
      return a
   }
   return b
}

总结

Hard题目,题目跟leetcode 1915.最美子字符串的数目 类似,都是采用前缀和+位运算

展开阅读全文

页面更新: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