首页 > 牛牛喜欢字符串
头像 东溪看水
发表于 2020-06-23 14:33:09
解题思路 有一个长度为 n 的字符串(仅包含小写字母),把这个字符串每隔 k 个就分出来一个子串,比如 [1,k] 为第一个子串,[k+1,2k] 为第二个、[2k+1,3k] 为第三个.....(保证n%k=0)求:把这些子串都变成一样的最少操作次数。 对所有子串的第 1 个字符,求出哪个字符最多 展开全文
头像 quchen666
发表于 2026-01-09 10:31:30
#include <bits/stdc++.h> using namespace std; int n,k; int cnt[27]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>&g 展开全文
头像 BeauWill
发表于 2026-01-09 00:20:56
我们发现牛牛实际上只关心每组对应位置上的字母是否相同,那么就会很自然且贪心地想到,把出现最多的那个字母不动,修改其他字母。首先统计每组的第i个位置各个字母的数量,存储方式可以用数组或者哈希表来存储。然后枚举0~k-1个位置,每次ans都累加所有字母数(实际上就是n/k,有n个字母,每k个字母一组,一 展开全文
头像 不死鸟a
发表于 2026-01-09 00:04:51
#include <bits/stdc++.h> #include <unordered_map> using namespace std; int main() { int n,k;cin>>n>>k; string s;cin&g 展开全文
头像 kilomatutinal
发表于 2026-01-09 00:58:22
这道题其实超简单的说~ (*≧▽≦)我们只需要把字符串s分成n/k个子串,每个子串的成员是那些间隔相等的位置上的字母喵~然后对每个子串的相同位置,我们数一数哪种小字母出现得最多,就让其他所有小字母都变成这个最多的小字母。这样需要改动的次数就最少啦!最后把每个子串要改的次数加起来,就是总的改动次数了喵 展开全文
头像 BaiJay
发表于 2026-01-09 08:08:11
解题思路:这道题目目的是让字串相同,且要求操作次数最少,也就是对每个子串相同位置进行修改,而想要修改次数最少,我们肯定选择出现次数最大的字符作为目标字符,代码实现如下,先分割统计每个子串同一位置的字母数量,由于子串有n/k个,所以ans直接相加不同的个数即可 #include <bits/st 展开全文
头像 憨憨的竹林
发表于 2026-01-09 15:20:17
这是一道经典的贪心题首先先用列表去存储按长度分割的每一个子串随后进行k次遍历,每次遍历各个子串的0,1……k - 1索引对应的字符,用字典进行出现次数的累加。因为要修改的总次数最小,依据贪心我们让每次遍历时修改的次数都最小,所以我们找到一次遍历中出现最多的那个字符让它保持不动,修改其余字符,每一次答 展开全文
头像 此在Dasein
发表于 2026-01-09 06:27:03
核心算法:贪心 竖向切片 我们可以将这 个长度为 的子串想象成一个 的字符矩阵: 第 1 行: 第 2 行: ... 第 行: 目标转化: 要是所有行(子串)完全相同,意味着在这个矩阵中,每一列的所有字符必须相同。 由于不同列之间的字符选择是相互独立的,我们可以将大问题分解为 个独立的 展开全文
头像 YunBaichuan
发表于 2026-01-09 10:14:52
思路:贪心,我们需要最少的操作次数,那就可以cnt出每个字符串对应位置的元素个数,并且要所有对应位置的字符都变成最大数量的那个字符,具体是什么字符我们不关心。那么剩下需要修改的字符数量就是n // k - mx,我们遍历一遍,然后累加即可得到ans 注意:具体实现的时候不需要把具体的n // k个字 展开全文
头像 自由的风0450
发表于 2026-01-09 10:35:17
统计某位置上出现次数最多的字母,将其他字母都变为该字母并记录更改次数。 #include <iostream> #include<vector> #include<string> #include<algorithm> using namespace 展开全文