第 378 场 LeetCode 周赛题解

A 检查按位或是否存在尾随零

在这里插入图片描述

枚举:枚举两个元素的组合即可

class Solution {
public:
    bool hasTrailingZeros(vector<int> &nums) {
        int n = nums.size();
        for (int i = 0; i < n; i++)
            for (int j = 0; j < i; j++)
                if ((nums[i] | nums[j]) % 2 == 0)
                    return true;
        return false;
    }
};

B 找出出现至少三次的最长特殊子字符串 I

在这里插入图片描述

同C …

class Solution {
public:
    int maximumLength(string s) {
        int n = s.size();
        vector<vector<int>> li(26);
        for (int i = 0, j = 0; i < n; i = ++j) {
            while (j + 1 < n && s[j + 1] == s[j])
                j++;
            li[s[i] - 'a'].push_back(j - i + 1);
        }
        int l = 0, r = n;
        auto can = [&](int len) {
            for (auto &v: li) {
                int cnt = 0;
                for (auto blk: v)
                    if (blk >= len)
                        cnt += blk - len + 1;
                if (cnt >= 3)
                    return true;
            }
            return false;
        };
        while (l < r) {
            int mid = (l + r + 1) / 2;
            if (can(mid))
                l = mid;
            else
                r = mid - 1;
        }
        return l != 0 ? l : -1;
    }
};

C 找出出现至少三次的最长特殊子字符串 II

在这里插入图片描述

二分:首先将 s s s 划分成若干特殊子字符串,然后二分枚举答案,判断当前枚举值是否满足条件

class Solution {
public:
    int maximumLength(string s) {
        int n = s.size();
        vector<vector<int>> li(26);
        for (int i = 0, j = 0; i < n; i = ++j) {
            while (j + 1 < n && s[j + 1] == s[j])
                j++;
            li[s[i] - 'a'].push_back(j - i + 1);
        }
        int l = 0, r = n;
        auto can = [&](int len) {//判断是否存在出现至少三次长为len的特殊子字符串
            for (auto &v: li) {
                int cnt = 0;
                for (auto blk: v)
                    if (blk >= len)
                        cnt += blk - len + 1;
                if (cnt >= 3)
                    return true;
            }
            return false;
        };
        while (l < r) {
            int mid = (l + r + 1) / 2;
            if (can(mid))
                l = mid;
            else
                r = mid - 1;
        }
        return l != 0 ? l : -1;
    }
};

D 回文串重新排列查询

在这里插入图片描述
在这里插入图片描述

字符串哈希 + 分类讨论:每次查询对应两个区间 [ s 1 , e 1 ] [s1,e1] [s1,e1] [ s 2 , e 2 ] [s2,e2] [s2,e2] ,两个区间的位置关系可以分为:

  • 两个区间不相交
  • 两个区间相交
    • 一个区间包含另一个区间
    • 两个区间都不包含另一个区间
class Solution {
public:
    using ll = long long;

    vector<bool> canMakePalindromeQueries(string s, vector<vector<int>> &queries) {
        string sl = s.substr(0, s.size() / 2), sr = s.substr(s.size() / 2, s.size() / 2);
        reverse(sr.begin(), sr.end());//反转s后半段
        srand(time(0));
        ll e_ = 2333 + rand() % 10;
        ll mod_ = 1e9 + rand() % 10;

        shash hl(sl, e_, mod_), hr(sr, e_, mod_);
        int n = sl.size();
        vector<vector<int>> psl(26, vector<int>(n + 1)), psr(26, vector<int>(n + 1));//各个字符出现数目的前缀和

        auto cmp_ps = [&](string &s, vector<vector<int>> &ps) {//计算psl、psr
            for (int i = 0; i < 26; i++)
                ps[i][0] = 0;
            for (int i = 0; i < n; i++)
                for (int j = 0; j < 26; j++)
                    ps[j][i + 1] = s[i] - 'a' == j ? ps[j][i] + 1 : ps[j][i];
        };
        cmp_ps(sl, psl);
        cmp_ps(sr, psr);

        auto eql = [&](int l, int r) {//判断 sl[l,r] 和 sr[l,r] 中各字符数目是否都相等
            for (int i = 0; i < 26; i++)
                if (psl[i][r + 1] - psr[i][l] != psr[i][r + 1] - psr[i][l])
                    return false;
            return true;
        };

        auto ge = [&](int s1, int e1, int s2, int e2) {//判断 sl[s1,e1] 中各字符数目是否都不小于 sr[s2,e2] 中对应字符数目
            for (int i = 0; i < 26; i++)
                if (psl[i][e1 + 1] - psr[i][s1] < psr[i][e2 + 1] - psr[i][s2])
                    return false;
            return true;
        };
        auto le = [&](int s1, int e1, int s2, int e2) {//判断 sl[s1,e1] 中各字符数目是否都不大于 sr[s2,e2] 中对应字符数目
            for (int i = 0; i < 26; i++)
                if (psl[i][e1 + 1] - psr[i][s1] > psr[i][e2 + 1] - psr[i][s2])
                    return false;
            return true;
        };

        vector<bool> res(queries.size(), false);

        for (int ind = 0; ind < queries.size(); ind++) {
            int s1 = queries[ind][0], e1 = queries[ind][1], s2 = n * 2 - 1 - queries[ind][3], e2 = n * 2 - 1 - queries[ind][2];
            if (e1 < s2 || e2 < s1) {//两个区间不相交
                if (e2 < s1) {
                    swap(s1, s2);
                    swap(e1, e2);
                }
                if (s1 != 0 && hl(0, s1 - 1) != hr(0, s1 - 1))
                    continue;
                if (e1 + 1 < s2 && hl(e1 + 1, s2 - 1) != hr(e1 + 1, s2 - 1))
                    continue;
                if (e2 != n - 1 && hl(e2 + 1, n - 1) != hr(e2 + 1, n - 1))
                    continue;
                if (!eql(s1, e1) || !eql(s2, e2))
                    continue;
            } else {//两个区间相交
                if (s1 <= s2 && e1 >= e2) {//[s1,e1] 包含 [s2,e2]
                    if (s1 != 0 && hl(0, s1 - 1) != hr(0, s1 - 1) || e1 != n - 1 && hl(e1 + 1, n - 1) != hr(e1 + 1, n - 1))
                        continue;
                    if (!eql(s1, e1))
                        continue;
                } else if (s2 <= s1 && e2 >= e1) {[s2,e2] 包含 [s1,e1]
                    if (s2 != 0 && hl(0, s2 - 1) != hr(0, s2 - 1) || e2 != n - 1 && hl(e2 + 1, n - 1) != hr(e2 + 1, n - 1))
                        continue;
                    if (!eql(s2, e2))
                        continue;
                } else {//两个区间相交,且任意一个都不包含另一个
                    if (s1 < s2) {// s1<s2<=e1<=e2
                        if (s1 != 0 && hl(0, s1 - 1) != hr(0, s1 - 1) || e2 != n - 1 && hl(e2 + 1, n - 1) != hr(e2 + 1, n - 1))
                            continue;
                        if (!ge(s1, e1, s1, s2 - 1) || !le(e1 + 1, e2, s2, e2) || !eql(s1, e2))
                            continue;
                    } else {//s2<s1<=e2<=s1
                        if (s2 != 0 && hl(0, s2 - 1) != hr(0, s2 - 1) || e1 != n - 1 && hl(e1 + 1, n - 1) != hr(e1 + 1, n - 1))
                            continue;
                        if (!le(s2, s1 - 1, s2, e2) || !ge(s1, e1, e2 + 1, e1) || !eql(s2, e1))
                            continue;
                    }
                }
            }
            res[ind] = true;
        }
        return res;
    }

    class shash {//字符串哈希模板
    public:
        vector<ll> pres;
        vector<ll> epow;
        ll e, p;

        shash(string &s, ll e, ll p) {
            int n = s.size();
            this->e = e;
            this->p = p;
            pres = vector<ll>(n + 1);
            epow = vector<ll>(n + 1);
            epow[0] = 1;
            for (int i = 0; i < n; i++) {
                pres[i + 1] = (pres[i] * e + s[i]) % p;
                epow[i + 1] = (epow[i] * e) % p;
            }
        }

        ll operator()(int l, int r) {
            ll res = (pres[r + 1] - pres[l] * epow[r - l + 1] % p) % p;
            return (res + p) % p;
        }
    };
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/295499.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python从入门到精通总结规划

Python从入门到精通专栏&#xff1a;http://t.csdnimg.cn/4Lals 时光飞逝&#xff0c;转眼间我们的Python从入门到精通专栏已经接近尾声。 在这里&#xff0c;向大家表示最诚挚的感谢。感谢你们一直以来对Python学习的热情&#xff0c;以及对本专栏的持续关注和支持。 回顾过去…

还在苦苦寻找PPT模板?这5个好用的PPT模板网站来拯救你!

行走职场&#xff0c;一大傍身的能力就是制作PPT&#xff0c;不过每回留给我们制作PPT的时间非常少&#xff0c;时间紧任务重&#xff0c;想在短时间内制作出高颜值的PPT&#xff0c;少不了平时有意识地收藏好看的PPT模板或PPT模板网站。 为方便各位找到可在工作中使用的PPT模…

数据结构学习 jz34 二叉树中和为某一值的路径

关键词&#xff1a;回溯 二叉树 前序遍历 路径记录 因为我没有仔细接触过二叉树的遍历过程&#xff0c;所以我是懵懵懂懂按照dfs的方法写的。没想到写对了&#xff0c;看了解答发现这叫做二叉树的前序遍历。用时29min。 这让我明白了前序遍历和dfs原来是有相同之处的。&#…

从零学算法17

17.给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “23” 输出&#xff1a;[…

GLTF编辑器实现逼真的石门模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 在凹凸贴图中&#xff0c;每个像素点都包含了一个法线向量&#xff0…

【开源项目】超经典数字孪生智慧物流园

数字孪生物流园管理系统&#xff0c;具有仓储管理智能化、运输管理自动化、物流管理系统化、共享服务平台化等特点。飞渡科技基于数字孪生、物联网IOT、人工智能等新一代信息技术&#xff0c;以智能设备为基底&#xff0c;通过人、物、资源、系统等多方数据的传递和交互&#x…

记一次canal除坑记录

记一次canal除坑记录 错误信息 Caused by :com.alibaba.otter.canal.parse.exception.CanalParseException: column size is not match for table 问题处理 今天对Canal相关程序进行升级&#xff0c;原监听的表及业务都正常&#xff1b;遇到新增加的表时总是不走&#xff1b;…

【第七在线】智能商品系统是否可以帮助预测新品的销售表现?

智能商品系统在鞋服企业商品运营中的应用已经成为一种趋势。随着技术的发展和数据的积累&#xff0c;智能化已经成为企业提高运营效率和市场竞争力的重要手段。其中&#xff0c;智能商品系统通过对大量销售数据的分析&#xff0c;可以帮助预测新品的销售表现&#xff0c;为企业…

Linux驱动(三)platform总线驱动

1、前言 Platform总线是Linux内核中用于管理嵌入式系统中的设备的一种总线类型。它允许设备驱动程序通过一组标准的接口与嵌入式系统中的硬件设备进行通信。 Platform总线维护了一个驱动链表和一个设备链表&#xff0c;当有新的设备添加后会通过自身的match函数遍历驱动链表查…

【mac-m1 docker 安装upload-labs靶场】

1.搜索upload-labs docker search upload-labs 2.下载upload-labs docker pull c0ny1/upload-labs 3.启动 docker run -it -d --name uploadlabs -p 80:80 c0ny1/upload-labs --platform linux/amd64 4.访问127.0.0.1:80 注意点&#xff1a;后续使用的时候会报错 需要手动创…

LeetCode-无重复字符的最长子串(3)

题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 代码&#xff1a; class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> occnew HashSet<Character>();int lens.length();int…

Local server not started, start with 报错python -m weditor

一、python -m weditor 如图报错 Local server not started, start with 报错 二、解决方案 右上角选择新的无痕窗口下&#xff0c;然后打开 http://localhost:17310/ 即可

VMware Tools 启动脚本未能在虚拟机中成功运行。如果您在此虚拟机中配置了自定义启动脚本,请确保该脚本没有错误。您也可以提交支持请求,报告此问题。

问题描述&#xff1a;今天打开centos7虚拟机就是直接打不开了报了下面的错误&#xff0c;也没有动任何东西&#xff0c;点确定后&#xff0c;也是依然没有反应 问题原因&#xff1a;可能是虚拟机中的内存满了&#xff0c;需要清理内存 解决方法如下 首先cmd打开终端敲入如下命…

linux磁盘管理实验1

1.在安装好的linux系统中新加一块硬盘&#xff0c;将硬盘分成2个主分区&#xff0c;和2个逻辑分区&#xff0c;将其中一个逻辑分区设置成vfat&#xff08;FAT32&#xff09;分区&#xff0c;并实现开机自动挂载所有分区。 答&#xff1a;添加一个硬盘为sdb 分成2个主分区&#…

LLM增强LLM;通过预测上下文来提高文生图质量;Spikformer V2;同时执行刚性和非刚性编辑的通用图像编辑框架

文章首发于公众号&#xff1a;机器感知 LLM增强LLM&#xff1b;通过预测上下文来提高文生图质量&#xff1b;Spikformer V2&#xff1b;同时执行刚性和非刚性编辑的通用图像编辑框架 LLM Augmented LLMs: Expanding Capabilities through Composition 本文研究了如何高效地组…

面试算法96:字符串交织

题目 输入3个字符串s1、s2和s3&#xff0c;请判断字符串s3能不能由字符串s1和s2交织而成&#xff0c;即字符串s3的所有字符都是字符串s1或s2中的字符&#xff0c;字符串s1和s2中的字符都将出现在字符串s3中且相对位置不变。例如&#xff0c;字符串"aadbbcbcac"可以由…

透明OLED屏制作:工艺与技术挑战

透明OLED屏作为一种前沿的显示技术&#xff0c;其制作过程涉及一系列复杂的工艺和技术挑战。作为一名专注于OLED技术研发的工程师&#xff0c;我将为大家深入解析透明OLED屏的制作过程&#xff0c;以及所面临的挑战。 首先&#xff0c;透明OLED屏的制作过程大致可分为以下几个步…

使用.Net nanoFramework为ESP32进行蓝牙配网

通过前面的介绍&#xff0c;我们已经学会了如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。然而&#xff0c;在实际的物联网环境中&#xff0c;我们往往需要使用更便捷的式来满足配网需求。这篇文章将带你了解一些常见的配网方案&#xff0c;并以 ESP32 为例&…

【Java 进阶篇】Nginx 使用详解:搭建高性能的 Web 服务器

在互联网的世界里&#xff0c;Web 服务器是我们访问网站、获取信息的入口。Nginx&#xff08;发音"engine x"&#xff09;作为一款轻量级、高性能的 Web 服务器和反向代理服务器&#xff0c;因其出色的性能和可扩展性而备受推崇。本文将围绕 Nginx 的使用进行详解&am…

KK集团高管变更:陈世欣任总经理,涉无证放贷遭关注,还曾被处罚

近日&#xff0c;KK集团关联公司广东快客电子商务有限公司&#xff08;下称“KK集团”&#xff09;发生工商变更&#xff0c;其中郭惠波不再担任该公司总经理一职&#xff0c;由陈世欣接任。而在早前&#xff0c;陈世欣曾于2020年取代吴悦宁担任总经理职务&#xff0c;2021年7月…