(科大讯飞)删除字符串中的连续空格(只保留一个),O(n)时间复杂度,O(1)空间复杂度

        昨天(2012/10/23)晚上,南大,科大讯飞宣讲加笔试,题目很基础,也很简单,可是。。。没认真弄。挂了,回来痛定思痛,今天南邮打算再去跑一趟。

       另一个哥们由于没有使用内层循环(潜意识告诉他,那样会增加复杂度,其实不会),使用了四个分支判断,而我当时考虑的实现的需要,用了最笨的方法,涉及大量的元素移动(太烂了,居然当时出来还沾沾自喜,真是丢人)。

       这里参考了《算法导论》中快速排序的划分函数的写法,设置两个指针,一个用于遍历,一个用于结果的拷贝。另外也参考了网上百度知道的一些朋友的类似事例程序。

//trim a string by make  more than one blank to one blank
char* trim(char* a)
{
	int i=-1,j=0;
	for (;a[j]!='\0';j++)
	{
		if (a[j]==a[j+1] && a[j+1]==' ')
		{
			//skip more than one blank
			while (a[j]==' ')
			{
				++j;
			}
			--j;// go back to the last blank
		}
		a[++i]=a[j];
	}
	a[++i]='\0';
	return a;
}
int main( void ) 
{
 
	char a[100]="a b  c  d  e                  f";
	print(a);
	print(trim(a));
	return 0;
}


 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值