删除指定字符
来源:互联网 发布:怎么登录阿里云邮箱 编辑:程序博客网 时间:2024/06/02 10:49
题目:
删除字符串中的“b”和“ac”,需要满足如下的条件:
删除字符串中的“b”和“ac”,需要满足如下的条件:
- 字符串只能遍历一次
- 不能够实用额外的空间
例如:
- acbac ==> ""
- aaac ==> aa
- ababac ==> aa
- bbbbd ==> d
进一步思考:如何处理aaccac呢,需要做哪些改变呢?
分析:
首先要明白从字符串中删除某些字符该如何实现,显而易见我们可以把保留的字符拷贝新的字符串中来实现删除。但是题目要求不能使用额外的空间。那就是将要删除的字符全部交换到字符串的尾部,然后设置一个'\0'表示字符串的结尾。
其次,如果要删除的都是单个字符的字符串,就很直接:我们使用i和j两个变量遍历字符串,i表示不会删除的字符的位置,j从0开始,只要i所在位置的字符不是要删除的字符,就str[j]=str(str表示字符串),然后j++指向下一个位置。一次遍历即可,不需要额外申请空间,只需要两个变量。
但是,现在删除的字符串中有多个字符的,如:“ac”。那要如何处理呢?这里介绍一个小技巧:状态机。这里,我们有两个状态:ONE和TWO。TWO表示,前一个字符时‘a’的状态,其他的都用ONE表示。还是采用前面所描述的遍历方法:
- 如果当前状态为ONE,则拷贝:str[j]=str;但如果当前字符满足以下两种状态的任一个,则不进行拷贝:
- 当前字符是‘b’,因为我们要删除b
- 当前字符是‘a’,我们要考虑下一个字符是c
- 如果当前状态为TWO:
- 当前字符不是‘c’,那么我们要先拷贝前一个字符‘a’
- 然后考虑当前字符,如果不是‘b’或者‘a’,则拷贝字符
状态转换非常简单,就是每次都检查,是前一个字符为‘a’。基本代码如下:
下面进一步考虑: 根据上面的算法,我们考虑aaccac,最终得到ac。ac在题目中要求的也是要删除的。是否要删除这个ac,就需要和面试官进行交流了,无论如何,总是要考虑这种情况。还是采用上面的算法,怎么解决删除之后还可以删除的情况?其实非常简单,只需要做很小的修改,我们在循环最后加上这个代码即可:
删除字符
http://dzgzchina.com/forum.php?mod=viewthread&tid=72
(出处: 待字闺中)
http://dzgzchina.com/forum.php?mod=viewthread&tid=72
(出处: 待字闺中)
0 0
- 删除指定位置字符
- 删除指定字符
- 删除指定字符
- 指定字符删除
- 删除指定字符
- 指定字符删除
- 题目:删除指定字符
- 删除指定字符
- 删除字符串指定字符
- java删除指定字符
- 删除指定的字符
- 字符串删除指定字符
- 1198删除指定字符
- 删除指定字符
- 1. 删除指定的字符
- 字符串处理 删除指定字符
- 字符串删除指定字符算法
- 字符串之删除指定字符
- Mac上使用Cario
- C语言实现字符串反转
- 我的Github
- 一个菜鸟半年的游戏测试的工作心得
- HDU1431 素数回文
- 删除指定字符
- ajax请求之JSON.stringify
- ajax请求验证登录名是否已注册
- IDEA设置注释作者名字
- MacType渲染问题
- MD5加密
- javascript对象
- 门禁系统
- cantor数表