LeetCode——第 405 场周赛

题目

找出加密后的字符串

给你一个字符串 s 和一个整数 k。请你使用以下算法加密字符串:

对于字符串 s 中的每个字符 c,用字符串中 c 后面的第 k 个字符替换 c(以循环方式)。
返回加密后的字符串。

示例 1:

输入: s = “dart”, k = 3

输出: “tdar”

解释:

对于 i = 0,‘d’ 后面的第 3 个字符是 ‘t’。
对于 i = 1,‘a’ 后面的第 3 个字符是 ‘d’。
对于 i = 2,‘r’ 后面的第 3 个字符是 ‘a’。
对于 i = 3,‘t’ 后面的第 3 个字符是 ‘r’。

解题思路

遍历字符串,每个下标都进行一次判断是否加上k会大于字符串的长度,如果大于等于字符串的长度,则对下标进行+k%len的操作,并把对应下标的值赋过去

class Solution {
    public String getEncryptedString(String s, int k) {
        char[]sa=s.toCharArray();
        int len=sa.length;
        for(int i=0;i<len;i++){
            sa[i]=s.charAt((i+k)%len);
        }
        return new String(sa);
    }
}

生成不含相邻零的二进制字符串

给你一个正整数 n。

如果一个二进制字符串 x 的所有长度为 2 的
子字符串
中包含 至少 一个 “1”,则称 x 是一个 有效 字符串。

返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。

示例 1:

输入: n = 3

输出: [“010”,“011”,“101”,“110”,“111”]

解释:

长度为 3 的有效字符串有:“010”、“011”、“101”、“110” 和 “111”。

解题思路

我们可以把 i 取反(保留低 n 位),记作 x。问题变成:判断 x 中是否有相邻的 1。

这可以用 x & (x >> 1) 来判断,如果这个值等于 0,则说明 x 中没有相邻的 1。

class Solution {
    public List<String> validStrings(int n) {
        List<String> ans = new ArrayList<>();
        int mask = (1 << n) - 1;
        for (int i = 0; i < (1 << n); i++) {
            int x = mask ^ i;
            if (((x >> 1) & x) == 0) {
                ans.add(Integer.toBinaryString((1 << n) | i).substring(1));
            }
        }
        return ans;
    }
}

统计 X 和 Y 频数相等的子矩阵数量

给你一个二维字符矩阵 grid,其中 grid[i][j] 可能是 ‘X’、‘Y’ 或 ‘.’,返回满足以下条件的
子矩阵
数量:

包含 grid[0][0]
‘X’ 和 ‘Y’ 的频数相等。
至少包含一个 ‘X’。

示例 1:

输入: grid = [[“X”,“Y”,“.”],[“Y”,“.”,“.”]]

输出: 3

解释:
在这里插入图片描述

解题思路

二位前缀和

class Solution {
    public int numberOfSubmatrices(char[][] grid) {
        int ans = 0;
        int m = grid.length;
        int n = grid[0].length;
        int[][][] sum = new int[m + 1][n + 1][2];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                sum[i + 1][j + 1][0] = sum[i + 1][j][0] + sum[i][j + 1][0] - sum[i][j][0];
                sum[i + 1][j + 1][1] = sum[i + 1][j][1] + sum[i][j + 1][1] - sum[i][j][1];
                if (grid[i][j] != '.') {
                    sum[i + 1][j + 1][grid[i][j] & 1]++;
                }
                if (sum[i + 1][j + 1][0] > 0 && sum[i + 1][j + 1][0] == sum[i + 1][j + 1][1]) {
                    ans++;
                }
            }
        }
        return ans;
    }
}

最小代价构造字符串

给你一个字符串 target、一个字符串数组 words 以及一个整数数组 costs,这两个数组长度相同。

设想一个空字符串 s。

你可以执行以下操作任意次数(包括零次):

选择一个在范围 [0, words.length - 1] 的索引 i。
将 words[i] 追加到 s。
该操作的成本是 costs[i]。
返回使 s 等于 target 的 最小 成本。如果不可能,返回 -1。

示例 1:

输入: target = “abcdef”, words = [“abdef”,“abc”,“d”,“def”,“ef”], costs = [100,1,1,10,5]

输出: 7

解释:

选择索引 1 并以成本 1 将 “abc” 追加到 s,得到 s = “abc”。
选择索引 2 并以成本 1 将 “d” 追加到 s,得到 s = “abcd”。
选择索引 4 并以成本 5 将 “ef” 追加到 s,得到 s = “abcdef”。

解题思路

字符串哈希可以O(1) 的判断 子字符串 target[l…r] 是否在 words 中

class Solution {

    static int INF = (int) 1e9;
    static int B = 37;// 哈希的基数
    static long[] A = new long[50001];// A[i] = B ^ i
    static {
        A[0] = 1;
        for (int i = 1; i <= 50000; i++) {
            A[i] = A[i - 1] * B;
        }
    }
    long[] hash;

    public int minimumCost(String target, String[] words, int[] costs) {
        char[] str = target.toCharArray();
        int n = str.length;
        hash = new long[n + 1];
        for (int i = 1; i <= n; i++) {
            hash[i] = hash[i - 1] * B + str[i - 1];
        }
        HashMap<Long, Integer> cost = new HashMap<>();// words 中不同 hash 值的 cost
        HashSet<Integer> tmp = new HashSet<>();
        for (int i = 0; i < costs.length; i++) {
            long v = 0;
            for (char c : words[i].toCharArray()) {
                v = v * B + c;
            }
            tmp.add(words[i].length());
            cost.merge(v, costs[i], Integer::min);
        }
        int[] len = new int[tmp.size()];// words 中字符串长度种类数
        int j = 0;
        for (int v : tmp) {
            len[j++] = v;
        }
        Arrays.sort(len);
        int[] dp = new int[n + 1];
        Arrays.fill(dp, INF);
        dp[0] = 0;
        for (int i = 1; i <= n; i++) {
            for (int k : len) {
                if (i < k) {
                    break;
                }
                // 判断 target[(i-k)..(i-1)] 是否在 words 中,如果在就转移
                dp[i] = Math.min(dp[i], cost.getOrDefault(query(i - k, i - 1), INF) + dp[i - k]);
            }
        }
        return dp[n] >= INF ? -1 : dp[n];
    }

    // 查询 target[l..r] 的哈希值
    long query(int l, int r) {
        return hash[r + 1] - hash[l] * A[r - l + 1];
    }

}

来源

LeetCode

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

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

相关文章

Visual Studio Code 教程 VsCode安装Live Server以服务形式打开html

搜索Live Server 插件,然后安装 选一个html文件&#xff0c;右键点击 Open with live server,然后就自动弹出来了

最优化方法 运筹学【】

1.无约束 常用公式 线搜索准则&#xff1a;求步长 精确线搜索&#xff08;argmin&#xff09; 最速下降&#xff1a;sd&#xff1a;线性收敛 2.算法 SD dk&#xff1a;付梯度-g newton dk&#xff1a;Gkd-g 二阶收敛&#xff0c;步长为1 阻尼牛顿&#xff1a;步长用先搜…

数据分析与挖掘实战案例-电商产品评论数据情感分析

数据分析与挖掘实战案例-电商产品评论数据情感分析 文章目录 数据分析与挖掘实战案例-电商产品评论数据情感分析1. 背景与挖掘目标2. 分析方法与过程2.1 评论预处理1. 评论去重2. 数据清洗 2.2 评论分词1. 分词、词性标注、去除停用词2. 提取含名词的评论3. 绘制词云查看分词效…

Linux dig命令常见用法

Linux dig命令常见用法 一、dig安装二、dig用法 DIG命令(Domain Information Groper命令)是常用的域名查询工具&#xff0c;通过此命令&#xff0c;你可以实现域名查询和域名问题的定位&#xff0c;对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说&#xff0c;它是一个非…

Linux中的粘滞位及mysql日期函数

只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写 权限. 为了解决这个不科学的问题, Linux引入了粘滞位的概念. 粘滞位 当一个目录被设置为"粘滞位"(用chmod t),则该目录下的文件只能由 一、超级管理员删除 二、该目录…

汇川CodeSysPLC教程 Modbus变量编址

线圈&#xff1a;位变量&#xff0c;只有两种状态0和1。汇川PLC中包含Q区及SM区等变量。 寄存器&#xff1a;16位&#xff08;字&#xff09;变量&#xff0c;本PLC中包含M区及SD区等变量 说明&#xff1a; 汇川HMI的专用协议使用不同功能码&#xff1a;在访问SM时&#xff0c…

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现(6000字以上论文参考)

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

使用AI学习英语

使用AI学英语可以通过与智能AI对话、模拟对话场景、提供即时反馈和个性化学习计划等方式提高学习效率和效果。然而&#xff0c;AI技术也存在局限性&#xff0c;如缺乏情感交流和真实语境&#xff0c;需要与真人教师结合使用。 AI学英语的基本原理和应用 AI的基本原理 AI&…

人工智能概论 | 基于A*算法的8数码问题求解

大学四年的全部课程和考试都已经结束啦&#xff01; 最近闲来无事&#xff0c;随便发发自己的实验报告&#xff0c;供后面的学弟学妹们参考~ 目录 实验1 基于A*算法的8数码问题求解 1.1 程序总体流程 1.2 关键代码展示 1.3 输出结果展示及分析 1.3.1 总步数展示 1.…

Python编程学习笔记(1)--- 变量和简单数据类型

1、变量 在学习编程语言之前&#xff0c;所接触的第一个程序&#xff0c;绝大多数都是&#xff1a; print("Hello world!") 接下来尝试使用一个变量。在代码中的开头添加一行代码&#xff0c;并对第二行代码进行修改&#xff0c;如下&#xff1a; message "…

云计算【第一阶段(27)】DHCP原理与配置以及FTP的介绍

一、DHCP工作原理 1.1、DHCP概念 动态主机配置协议 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff0c;该协议允许服务器向客户端动态分配 IP 地址和配置信息。 DHCP协议支持C/S&#xff08;客户端/服务器&#xff09;结构&…

c++之命名空间详解(namespace)

引例 在学习之前我们首先了来看这样一个情形: 在c语言下&#xff0c;我们写了两个头文件&#xff1a;链表和顺序表的。我们会定义一个type(typedef int type)方便改变数据类型&#xff08;比如将int改成char&#xff09;&#xff0c;来做到整体代换。 但是我们两个头文件里面…

C# 实现基于exe内嵌HTTPS监听服务、从HTTP升级到HTTPS 后端windows服务

由于客户需要把原有HTTP后端服务升级为支持https的服务&#xff0c;因为原有的HTTP服务是一个基于WINDOWS服务内嵌HTTP监听服务实现的&#xff0c;并不支持https, 也不像其他IIS中部署的WebAPI服务那样直接加载HTTPS证书&#xff0c;所以这里需要修改原服务支持https和服务器环…

JavaScript中,正则表达式所涉及的api,解析、实例和总结

JS中正则的api包括以下&#xff1a; String#searchString#splitString#matchString#replaceRegExp#testRegExp#exec 1. String#search 查找输入串中第一个匹配正则的index&#xff0c;如果没有匹配的则返回-1。g修饰符对结果无影响 var string "abbbcbc"; var r…

iperf3: error - unable to connect to server: No route to host

1.确认iperf3版本是否统一。 2.确认防火墙是否关闭。 关闭防火墙 : systemctl stop firewalld 查看防火墙状态: systemctl status firewalld 3.重新建起链接

(三)前端javascript中的数据结构之集合

集合的特点 1.无序 2.唯一性 3.不可重复 集合相对于前面几种数据结构&#xff0c;比较简单好理解&#xff0c;看看代码实现就能知道他的用法了 集合的创建 function MySet() {this.item {}; } MySet.prototype.has function (value) {return value in this.item; };//增 M…

Java-链表中倒数最后k个结点

题目&#xff1a; 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为 ai &#xff0c;返回该链表中倒数第k个节点。 如果该链表长度小于k&#xff0c;请返回一个长度为 0 的链表。 数据范围&#xff1a;0≤&#x1d45b;≤1050≤n≤105&#xff0c;0≤&#x1d44e;…

c#字符串常用方法

目录 1.字符串的处理常用方法 1.1 Format 1.2 IsNullOrEmpty和IsNullOrWhiteSpace 1.3 Equals 1.4 Contains 1.5 Length 1.6 Substring 1.7 IndexOf和LastIndexOf 1.8 ​​​​​​​StartsWith 和 EndsWith 1.9 ​​​​​​​Remove 1.10 ​​​​​​​Revserse…

Java---包装类与泛型

1.包装类 1.1 包装类 在Java中&#xff0c;由于基本数据类型不是继承Object类&#xff0c;为了在泛型代码中可以支持基本数据类型&#xff0c;Java给每个基本数据类型各自提供了一个包装类。 如下图 除了char和int基本数据类型的包装类型有点特别&#xff0c;其他的都是首字…

20240708 每日AI必读资讯

&#x1f916;破解ChatGPT惊人耗电&#xff01;DeepMind新算法训练提效13倍&#xff0c;能耗暴降10倍 - 谷歌DeepMind研究团队提出了一种加快AI训练的新方法——多模态对比学习与联合示例选择&#xff08;JEST&#xff09;&#xff0c;大大减少了所需的计算资源和时间。 - JE…