首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-11-05 
(科大讯飞)删除字符串中的连续空格(只保留一个),O(n)时间复杂度,O(1)空间复杂度昨天(2012/10/23)晚上,南大

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

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

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

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

//trim a string by make  more than one blank to one blankchar* 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 blankwhile (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;}

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

 

热点排行