• 1542. 找出最长的超赞子字符串 哈希+状态压缩


    1542. 找出最长的超赞子字符串

    给你一个字符串 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 仅由数字组成

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/find-longest-awesome-substring
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

     做题结果

    成功,这要感谢灵神的构造题,这种题渐渐的也有点思路了

    方法:哈希+状态压缩

    特别需要注意的一点是,能否形成回文串,实际上是有两种情况,一种是长度奇数一种是长度偶数

    1. 长度是偶数:那每个字符的长度都是偶数

    2. 长度是奇数:中间的一个字符,长度是奇数,其他都是偶数

    那我们就有个重要的方向:关注字符串的奇偶性。

    1. 前面的字符串能找到和当前字符串奇偶性相同的情况,则两段相减,得到每个字符都是偶数,相减就可以找到长度偶数串;

    2. 前面的字符串形成的奇偶性,和当前差一位的情况,我们拿到当前的奇偶性,取反其中的一位,就可以找到长度为奇数的字符串

    3. 由于我们希望字符串尽可能的长,所以首次找到某个 key 之后,后续不再替换

    4. 奇偶性可用位运算的 1 和 0 来标识,前缀的方式求奇偶性

    1. class Solution {
    2. public int longestAwesome(String s) {
    3. long v = 0;
    4. Map map = new HashMap<>();//奇偶性->位置
    5. map.put(v,-1);
    6. int n = s.length();
    7. int ans = 0;
    8. for(int i =0 ; i < n; i++){
    9. int index = s.charAt(i)-'0';
    10. v = v ^ ((long)1<
    11. ans = Math.max(ans,i-map.getOrDefault(v,i));
    12. for(int j = 0; j < 10; j++){
    13. long diff = (v ^ ((long)1<
    14. ans = Math.max(ans,i-map.getOrDefault(diff,i));
    15. }
    16. if(!map.containsKey(v)) map.put(v,i);
    17. }
    18. return ans;
    19. }
    20. }

  • 相关阅读:
    有关环境变量
    控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境
    怎么看待编程界的劣驱良现象?
    算法: 对位置变换的字符串分组 49. Group Anagrams
    Linux系统中驱动格式基本实现
    final关键字
    Prometheus & Grafana 的安装
    Java21 + SpringBoot3整合Redis,使用Lettuce连接池,推荐连接池参数配置,封装Redis操作
    C语言 - 你一定能看懂的三子棋详解(万字长文,傻瓜式解析)
    【Linux初阶】Linux项目自动化构建工具-make/Makefile | 深入解析基础原理
  • 原文地址:https://blog.csdn.net/yu_duan_hun/article/details/126015231