给定一个只包含小写字母字符串,每次可以选择两个相同的字符删除,并在字符串结尾新增任意一个小写字母。 请问最少多少次操作后,所有的字母都不相同?
区块链毕设网qklbishe.com为您提供问题的解答
给定一个只包含小写字母字符串,每次可以选择两个相同的字符删除,并在字符串结尾新增任意一个小写字母。
请问最少多少次操作后,所有的字母都不相同?
本题属于比较简单的编程题,需要一些逻辑思维或数学思维。
首先,假设input: aaaabbccd,我们计算input中所有可配对的字母的数量ans1,对于以上input,共可配成四对aa,aa,bb,cc。
然后考虑到我们有四对已经配对,所以原数组剩余字母数量为rest=len(input)-ans1,即为5。当前5的值小于26(英文字母的数量),直接返回ans1 = 4就行了。如果rest大于26,返回(ans + rest – 26)即len(input)-26即可。
class Solution: def minOperations(self , str ): ans = 0; hash_map = {} for character in str: if not hash_map.get(character,0): hash_map[character] = 1 else: hash_map[character] = 0; ans += 1 string_num_rest = len(str) - ans return len(str) - 26 if string_num_rest > 26 else ans
05:22
这是用什么语言写的呀
35:28
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回满足题意的最小操作数
* @param str string字符串 给定字符串
* @return int整型
*/
int minOperations(string str) {
// write code here
string s;
cin>>s;
vector<int> rec(26,0);
int count=0;
for(char c:s){
if(rec[c-‘a’]==0)++count;
++rec[c-‘a’];
}
int res=0;
for(int &i:rec){
while(i>1){
–i;
–i;
++res;
++count;
if(i<1)–count;
}
}
if(count>26)res=res+count-26;
cout<<res<<endl;
return res;
}
};
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回满足题意的最小操作数
* @param str string字符串 给定字符串
* @return int整型
*/
int minOperations(string str) {
// write code here
string s;
cin>>s;
vector<int> rec(26,0);
int count=0;
for(char c:s){
if(rec[c-‘a’]==0)++count;
++rec[c-‘a’];
}
int res=0;
for(int &i:rec){
while(i>1){
–i;
–i;
++res;
++count;
if(i<1)–count;
}
}
if(count>26)res=res+count-26;
cout<<res<<endl;
return res;
}
};
03:40
以上就是关于问题给定一个只包含小写字母字符串,每次可以选择两个相同的字符删除,并在字符串结尾新增任意一个小写字母。
请问最少多少次操作后,所有的字母都不相同?的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训