首页 > 其他分享 >力扣1542 2024.5.22

力扣1542 2024.5.22

时间:2024-05-22 19:18:06浏览次数:37  
标签:1542 2024.5 奇数 int 前缀 力扣 回文

原题网址:此处为链接

个人难度评价:1700

分析:很惊讶会又在力扣看到区域赛的几乎原题。此题加上一个哈希就是区域赛题目了。
回文其实你只需要关注奇偶性。那么你用前缀和,维护[0:i]区间内每个数的奇偶性,此时你可以发现[0:i]和[i:j]的前缀和异或之后,为0的位就说明[i:j]内此位为偶。(也就是两个前缀和相同)为什么?
因为当[0:j]的第x位为奇数时,如果[0:i]的第x位也是奇数,那么显然奇+偶=奇。偶数也是同理。
当然,回文串长度为奇数的时候是可以有一位为0的。因为本题情况太少(仅有十个数字),你可以枚举当前位数下某一位在回文串中为奇数。

源码:

// 1542
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;

class Solution {
public:
    int longestAwesome(string s) {
        int n = s.size();
        bitset<10> m[n+1];
        unordered_map<bitset<10>, int> p;
        int ans = 1;
        int now = 1;
        p[m[0]] = 0;
        bitset<10> cur;
        for (int i=0; i<n; i++){
            m[i+1][s[i]-'0'] = 1;
            m[i+1] ^= m[i];
            if (p.find(m[i+1]) == p.end()){
                p[m[i+1]] = i+1;
            }
            else{
                ans = max(ans, i+1-p[m[i+1]]);
            }
            for (int j=0; j<=9; j++){
                cur = m[i+1];
                cur[j] = (cur[j])?0:1;
                if (p.find(cur) != p.end())
                    ans = max(ans, i+1-p[cur]);
            }
        }
        // for (int i=n; i>=1; i--){
        //     for (int j=1; j+i-1<=n; j++){
        //         now = (m[j-1] ^ m[j+i-1]).count();
        //         if (now <= 1){
        //             ans = i;
        //             return ans;
        //         }
        //     }
        // }
        return ans;
    }
};

标签:1542,2024.5,奇数,int,前缀,力扣,回文
From: https://www.cnblogs.com/TrainerMarvin/p/18206936

相关文章

  • 力扣2589 5.16
    原题网址:此处为链接个人难度评价:1700分析:原本的想法是按开始时间排序后遍历,然后贪心的把下一段的和这一段的放一起,发现不够放了就把不够的算出来截为新的一段。最后发现其实有后效性。正解的贪心是:按结束时间排序后(当然是升序),贪心的把本段的都放最后。每次放的时候先检查本区......
  • 力扣-1209. 删除字符串中的所有相邻重复项 II
    1.题目题目地址(1209.删除字符串中的所有相邻重复项II-力扣(LeetCode))https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string-ii/题目描述给你一个字符串 s,「k倍重复项删除操作」将会从s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的......
  • 云原生周刊:Flux 2.3 发布 | 2024.5.20
    开源项目推荐kubeinvaderskubeinvaders专为Kubernetes用户设计。它提供了一种有趣而交互式的方式来探索和可视化您的Kubernetes集群。通过类似游戏的界面,用户可以浏览他们的集群,发现资源,甚至模拟对Pod的攻击。通过kubeinvaders,管理Kubernetes环境变得引人入胜且富有信......
  • 力扣刷题备忘1
    1、释放链表节点时要注意,不要出现先保存虚拟头节点,然后又释放的情况,释放后的地址不应该被使用正确写法:ListNode*dhead=newListNode(0,head);//虚拟头结点ListNode*result=dhead->next;//释放dhead之前,使用result保存deletedhead;错误写法:ListNode*result=dhea......
  • 2024.5.19
    2024.5.19【人啊...想要保护重要东西的时候,就真的能变得很坚强。】Sunday四月十二模拟赛A.楼兰图腾在完成了分配任务之后,西部314来到了楼兰古城的西部。相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(V),一个部落崇拜铁锹(∧),他们分别用V......
  • 力扣207.课程表
    题目你这个学期必须选修numCourses门课程,记为0到numCourses-1。在选修某些课程之前需要一些先修课程。先修课程按数组prerequisites给出,其中prerequisites[i]=[ai,bi],表示如果要学习课程ai则必须先学习课程bi。例如,先修课程对[0,1]表示:想要学习课程......
  • 【每周例题】力扣 C++ 一年中的第几天
    一年中的第几天题目一年中的第几天 思路分析1.substr函数分割字符串,stoi函数将字符串转为十进制stoi函数介绍substr函数介绍2.判断是否为闰年,如果是闰年,则二月的天数+1代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intmonths[13]={0,31,28,3......
  • 2024.5~6 训练日记
    \(\color{grey}\bigstar\)可以秒杀的题。\(\color{green}\bigstar\)思考一会儿后可以秒的题。\(\color{blue}\bigstar\)需要较长时间思考的题。\(\color{#F1C40F}\bigstar\)看题解、稍加指点就会做的题。\(\color{red}\bigstar\)看题解后需要较长时间消化,甚至现在都没有......
  • 第二届“重科杯”重庆科技大学程序设计竞赛(同步赛)ptlks的题解(2024.5.18)
    A.Alice和Bob题意:给定序列A和序列,m组信息\((i,j)\),Alice可以交换\(A_i\)和\(A_j\)任意次,判断Alice是否能将序列A转变为序列B。思路由于Alice可以任意调整m组信息,所以题目所给m组信息\((i,j)\)不影响结果。先考虑k组信息,第i组为\((T_i,T_{i+1})\),\(1\leqT_1\ltT_2\lt.........
  • 力扣-316. 去除重复字母
    1.题目题目地址(316.去除重复字母-力扣(LeetCode))https://leetcode.cn/problems/remove-duplicate-letters/题目描述给你一个字符串s,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例1:输入:s=......