牛妹的字符串
牛妹拿到了一个只由小写字母组成的字符串s,接下来将字符串执行k次操作,每次操作都会把s中ASCII码最小的字母从s中删除,请返回k次操作之后的字符串s。
参考优秀的网友1:26个小写字母 放在数组里正好由大到小排序。
memset头文件是 #include cstring
fill是左闭右开的
O(n)时间复杂度
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param k int整型
* @return string字符串
*/
string NS_String(string s, int k) {
// write code here
bool f[26];
memset(f, false, sizeof(f));
for (char c:s) {
f[c-'a'] = true;
}
for (int i = 0; i < 26&&k; i++) { // 小写字母从左到右就是按顺序来的
if(!f[i]) { //如果f[i]是false
continue; //退出循环 什么也不做
}
k--;
f[i] = false;
}
string res = ""; //先初始化为空的字符串
for (char c:s) {
if(f[c - 'a']) { //为true
res += c; // 或者这样写res.push_back(c);
}
}
return res;
}
};
在给定的代码中,使用 += 运算符将字符 c 追加到字符串 res 的末尾。这种拼接字符串的操作是合法的,因为在 C++ 中,字符串可以通过不断追加字符来实现动态扩展。
在这个特定的代码片段中,开始时字符串 res 被初始化为空字符串 “”。然后,对字符串 s 中的每个字符 c 进行遍历。如果 f[c - ‘a’] 的值为 true,则说明当前字符 c 符合某种条件(这里使用字母表进行了简化),将其追加到字符串 res 的末尾。
通过使用 += 运算符,每次将一个字符追加到字符串的末尾,字符串 res 在循环结束时将包含满足条件的字符组成的子串。
需要注意的是,在对字符串进行频繁的拼接操作时,由于字符串的动态扩展会导致内存分配和复制操作,可能会影响性能。如果涉及大量的字符串拼接操作,可以考虑使用 std::stringstream 或 std::string 的 reserve() 函数预分配足够的内存,以提高效率。
参考优秀的网友2:
执行k次,循环k次,每次循环里面,找到最小字母的时间赋值,时间赋值度O(n),覆盖的时间复杂度也是O(n), k最大是n,所以总体时间复杂度是O(n^2)
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param k int整型
* @return string字符串
*/
string NS_String(string s, int k) {
// write code here
for(int i = 1; i<=k; i++) { 总共删除k次
char min1 = s[0];
int n = 0;
while(s[n]!='\0') { // O(n)
if(s[n] < min1) {
min1 = s[n];
}
n++;
}
int a, j;
for(a=j=0; s[a]!='\0'; a++) { //删除一次
if(s[a] != min1) { //不是要删除的
s[j] = s[a];
j++;
}
}
s[j] = '\0';
}
return s;
}
};
优秀的网友3:用map
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param k int整型
* @return string字符串
*/
string NS_String(string s, int k) {
// write code here
map<char, int> mymap;
for(char a:s) {
++mymap[a];
}
for (int i = 0; i<k; i++) {
int cnt = mymap.begin()->second;
char c = mymap.begin()->first;
while (cnt) {
s.erase(s.find(c), 1);
--cnt;
}
mymap.erase(c);
}
return s;
}
};