将字符串中的每个空格都替换成Mr.Yang,但不能申请新的buffer,同时要保证O(n)级的时间复杂度。(原题是替换成20%)
//思路:将字符串从后开始 把每个字符移动到totalLen--(包含了新添加字符的空间) 因此需要先算出字符串长度len 以及空格个数 然后算出totalLen
void ChangeSpace(char* s){
int len = 0;
int spaceCount = 0;
int totalLen = 0;
while (s[len]){
if (s[len] == ' '){
spaceCount++;
}
len++;
}
totalLen = len + spaceCount * 6;//取决于你替换字符串的字符个数
while (totalLen){
if (s[len] != ' '){
s[totalLen--] = s[len];//不是空格都往后移动
}
else{//是空格都用Mr.Yang填充
s[totalLen--] = 'g';
s[totalLen--] = 'n';
s[totalLen--] = 'a';
s[totalLen--] = 'Y';
s[totalLen--] = '.';
s[totalLen--] = 'r';
s[totalLen--] = 'M';
}
len--;
}
printf("%s", s);
}
本文介绍了一种在不申请额外缓冲区的情况下,将字符串中所有空格替换为'Mr.Yang'的方法,并确保了O(n)的时间复杂度。算法首先计算原始字符串长度和空格数量,再计算总长度并从后向前替换。
1348

被折叠的 条评论
为什么被折叠?



