当且仅当“字符串中的所有不同字符重复相同次数”时,称字符串为良好字符串。
现在,给定一个长度为n的字符串,我们必须在这个字符串中进行的最小更改次数是多少,这样字符串就变得正常了。
注意:我们只允许使用小写英文字母,我们可以将任何字母更改为任何其他字母。
示例:让String为yyxzzxxx
那么这里的答案是2。
说明:一种可能的解决方案YYXYXX。我们已将2“z”更改为2“y”。现在“x”和“y”都重复了4次。
我的做法:
但对于某些结果,它给出了错误的答案,因为当删除一些未出现最短时间的字符时,它们可能会以较少的移动提供一个好的字符串。
那么如何解决这个问题呢。请帮忙。
限制条件:字符串的长度最多为2000。
我的做法:
string s;
cin>>s;
int hash[26]={0};
int total=s.length();
for(int i=0;i<26;i++){
hash[s[i]-'a']++;
}
sort(hash,hash+total);
int ans=0;
for(int i=26;i>=1;i--){
int moves=0;
if(total%i==0){
int eachshouldhave=total/i;
int position=26;
for(int j=1;j<26;j++){
if(hash[j]>eachshouldhave && hash[j-1]<eachshouldhave){
position=j;
break;
}
}
int extrasymbols=0;
//THE ONES THAT ARE BELOW OBVIOUSLY NEED TO BE CHANGED TO SOME OTHER SYMBOL
for(int j=position;j<26;j++){
extrasymbols+=hash[j]-eachshouldhave;
}
//THE ONES ABOVE THIS POSITION NEED TO GET SOME SYMBOLS FROM OTHERS
for(int j=0;j<position;j++){
moves+=(eachshouldhave-hash[j]);
}
if(moves<ans)
ans=moves;
}
else
continue;
}
以下内容应修复您的实现:
std::size_t compute_change_needed(const std::string& s)
{
int count[26] = { 0 };
for(char c : s) {
// Assuming only valid char : a-z
count[c - 'a']++;
}
std::sort(std::begin(count), std::end(count), std::greater<int>{});
std::size_t ans = s.length();
for(std::size_t i = 1; i != 27; ++i) {
if(s.length() % i != 0) {
continue;
}
const int expected_count = s.length() / i;
std::size_t moves = 0;
for(std::size_t j = 0; j != i; j++) {
moves += std::abs(count[j] - expected_count);
}
ans = std::min(ans, moves);
}
return ans;
}
这是在线编码挑战之一(已完成)提出的问题<我只是需要一些逻辑来说明如何接近。 我们有两个字符串A和B,具有相同的超字符集。我们需要改变这些字符串来获得两个相等的字符串。在每个步骤中,我们可以执行以下操作之一: 移动可以在任一字符串上执行。 为了获得两个相等的字符串,我们需要的最小移动次数是多少? 输入格式和约束: 输入的第一行和第二行包含两个字符串A和B。保证它们的超集字符相等。 输出格式: 将最
问题内容: 在Objective-C中,我使用了: 但是现在NSBackWardsSearch似乎不存在。谁能为Swift提供等效的代码? 我希望能够在整个字符串中找到字符数。因此,在上面的示例中,它将返回3。 问题答案: 可可框架应该可以在Swift中访问,但是您需要导入它们。尝试导入以访问NSString API。从“将Swift与Cocoa和Objective-C结合使用”指南的“使用Coc
我们有一个 n 个正整数的数组。可接受的做法是将所有元素增加 1 或 2 或 5,但一个元素除外。我们需要找出最小操作数,以使所有数组元素的数量相等。 经过搜索,我找到了一种方法: 找出非最小元素与最小元素之间的所有差异 通过使用硬币找零方法,找到为所有差异找零所需的最小硬币数量 返回所有这些最小硬币数量的总和 但是这种方法对于此测试用例失败: 数组:< code>1,5,5 最小操作数:3 ()
我试图从字符串中找到最小的子字符串(包含 set 的所有值) 例如: 因为< code>OxVxT是示例1中最小的子串(包含集合的所有元素),所以我为它编写了代码,但这不是最好的方法,也不适用于所有示例,我没有通过我的代码找到最小的子串,我的代码如下: 我找到所有可能的子字符串索引,然后找到它们之间的距离,并且距离最短的子字符串是字符串中最小的子字符串。我的代码不能处理所有测试用例,也没有给出正确
问题内容: 我在尝试搜索字符串中的子字符串时遇到问题。该子字符串可能在字符串中也可能不在字符串中。 我知道是否可以完成的两种方法是: 正则表达式 但是,还有其他“优化”方式吗?你会怎么做? Ruby可以提供更好的答案吗?由于我们使用jRuby,因此答案可以是Ruby或Java。 问题答案: 在Ruby中,使用方法: 返回。
我有一个字符串s和一个整数k(子字符串长度),我正在尝试编写函数,这样它就可以找到长度为k的最小和最大的子字符串。并返回一个字符串,其中最小和最大的子字符串与换行符组合在一起。 到目前为止,我用下面的方法解决了这个问题,我编写了相同的代码来查找最小和最大的子字符串,然而,我想用流返回两个子字符串的单行代码。 我非常感谢任何建议,因为我现在正在学习lambda和stream。 那么,我该如何优雅地解