字符串去特定字符 百度二面遇到

本文详细解释了如何在不使用额外空间的情况下,从字符串中移除指定字符的过程,通过实例演示了核心算法步骤,包括变量初始化、遍历字符串及字符计数等关键操作,最终展示了一个简洁高效的实现代码。

题目描述:

输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。

输入:

测试数据有多组,每组输入字符串s和字符c。

输出:

对于每组输入,输出去除c字符后的结果。

样例输入:
heallo
a
样例输出:
hello
来源:
2009年哈尔滨工业大学计算机研究生机试真题
百度二面的时候遇到这道题,要求空间复杂度O(1)时间复杂度O(n)

所以需要原地转换,即每次移动字符,都将字符直接移动到它最后应该出现的位置上面

k用来记录特定字符的数量

k初始为0,所以str[i-k] = str[i]没有问题,之后每次检查出一个ch特定字符,k++,之后的str[i-k] = str[i]保证一次就将字符移动到它最后应该放置的位置上面

对 “healleo” 'e'这个字符串和特殊字符举例说明:

1、i= 0,k = 0, ‘h’ealleo->healleo

2、i= 1,k = 0, h‘e’alleo->healleo

3、i = 2,k = 1,he'a'lleo->haalleo

4、i= 3,k = 1, haa'l'leo->hallleo

5、i= 4,k = 1, hall'l'eo->hallleo

6、i = 5,k = 1,halll'e'o->halleeo

7、i= 6,k = 2, hallee'o'->halloeo

8、i = 7,k = 2,结束 

str[n-k] = '\0';//str[7-2] == str[i-k] = '\0'; 

9、halloeo -> hallo

核心代码:

k = 0;
n = strlen(str);
for(i = 0; i< n;i++)
{
	str[i-k] = str[i];
	if(str[i] == ch)
	{
		k++;
	}
}
str[n-k] = '\0';
完整代码:

/**************************************************************
    Problem: 1049
    User: hrdjmax2
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:916 kb
****************************************************************/

#include <stdio.h>
#include <string.h>
char str[1024];
char ch;
int main()
{
	int i,k,n;
	while(scanf("%s",str)!=EOF)
	{
		getchar();
		scanf("%c",&ch);
		k = 0;
		n = strlen(str);
		for(i = 0; i< n;i++)
		{
			str[i-k] = str[i];
			if(str[i] == ch)
			{
				k++;
			}
		}
		str[n-k] = '\0';
		printf("%s\n",str);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值