技术分享
📖找出最长的超赞子字符串
00 min
2024-7-15
2024-7-15
type
status
date
slug
summary
tags
category
icon
password
 

题目:找出最长的超赞子字符串

 
「超赞子字符串」需满足满足下述两个条件:
  • 该字符串是 s 的一个非空子字符串
  • 进行任意次数的字符交换后,该字符串可以变成一个回文字符串
 
示例 1:
示例 2:
示例 3:
示例 4:
 
提示:
  • 1 <= s.length <= 10^5
  • s 仅由数字组成
 

题解

思路

要找出最长的超赞子字符串,我们可以采用位掩码哈希表的方法。这个方法的核心思想是利用位掩码来跟踪字符串中每个字符出现次数的奇偶性,因为一个字符串要变成回文字符串,每个字符出现的次数要么是偶数,要么只有一个字符出现次数是奇数。
步骤如下:
  • 初始化一个变量state为0,用于表示当前的位掩码状态。
  • 初始化一个哈希表firstOccurrence,用来存储每个位掩码状态第一次出现的位置,初始时仅包含{0: -1},表示空字符串的状态。
  • 遍历字符串s,对于每个字符,更新state的值。这里我们将字符转换为0到9的数字,然后使用1 << (字符 - '0')来更新state。
  • 对于每个更新后的state,如果它之前出现过(在firstOccurrence中可以找到),则计算当前位置与第一次出现位置的距离,更新最长超赞子字符串的长度。
  • 同时,为了处理最多只有一个字符出现次数为奇数的情况,我们尝试将state的每一位翻转(表示添加或移除一个字符),看看翻转后的状态是否出现过,如果出现过,也更新最长长度。
  • 遍历结束后,返回记录的最长长度。

代码

 
 

附录

 
 
上一篇
统计美丽子字符串 II
下一篇
解码异或后的排列