面试题——字符串类型001
来源:互联网 发布:美食电视或者综艺 知乎 编辑:程序博客网 时间:2024/06/08 08:48
#include <stdio.h>
void remove_repeat(char *s,int iLen){
for(int i=0;s[i];i++){
for(int j=i+1;s[j];){
if(s[i]==s[j]){
for(int m=j;s[m];m++){
s[m]=s[m+1];//②s[m]=[++m]这种写法是有问题的,因为不知道++m是先执行还是后执行
}
}else{
j++;//①当相等的时候 j不用++
}
}
}
}
int main(){
char s[10]={'a','s','f','a','s','f','a','s','f'};//③数组大小把'\0'计算在内
//char s[5]="abaa";
remove_repeat(s,9);
printf("%s\n",s);
return 0;
}
题目:
Design an algorithm and write code to remove the duplicate characters in a string
without using any additional buffer NOTE: One or two additional variables are fine
An extra copy of the array is not。
意思是:设计一个算法编码实现删除一个字符串中重复的字符。不允许使用额外的空间:
一两个额外的变量是允许的,但是数组的拷贝是不允许的。
思路一:
最常规的想法是,第一个,第二个,第三个。。依次和它们后面的进行比较。如果有重复,则把后面的元素向前移动,覆盖那个重复的元素。
代码如上所示:
我犯的错误:
1、函数返回空,放到打印函数内VS会警告
比如:
printf("%s\n",func());
2、不能以<=iLen为结束条件:因为当abaa的情况时,最后会出现i指向的为'\0'而j指向的也为
'\0',导致死循环。
其他我出现的问题在代码中标示出来了。。
因为有循环遍历,并且还有移动操作。也就是n*(n-1)*O(1)*n
所以时间复杂度时O(n^3)
肯定有更好的思路。。
待续。。。
0 0
- 面试题——字符串类型001
- 面试题2——字符串类型
- 字符串面试题—字符串逆序
- 微软面试题——字符串转换成double类型数字
- 微软面试题——反转字符串
- 字符串操作——面试题总结
- 字符串操作——面试题总结
- 面试题——关于字符串查找
- 华为面试题——压缩字符串
- 【c++】字符串替换:——面试题
- 面试题28—字符串的排列
- 字符串面试题(一)— 字符串逆序
- 字符串面试题(二)— 间隔字符串逆序
- JS面试题—变量类型和计算
- 微软,Google面试题 (28) —— 字符串的排列
- 程序员面试题精选——字符串的排列
- 面试题——字符串中的字符是否唯一
- 面试题_28——字符串的全排列
- Ubuntu安装Redmine简易教程
- Android UI, EditText, AutoCompleteTextView
- ASP.NET动态网站开发培训-20.INSERT、UPDATE和DELETE语句
- iOS UITableView 滑动时顺序混乱或多个cell内容相同
- 安卓客户端缓存机制
- 面试题——字符串类型001
- android开发的学习路线
- 实现一个脚本引擎
- Java和Flex整合报错(三)
- unity3d 任务系统设计 mmo
- Android 属性动画(Property Animation) 完全解析 (下)
- 白沙雜記 勒馬臨門
- Java orb
- 给年轻程序员的建议