查看: 1448| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[字符串] 删除和复制特定字符

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
给一个大小为n的字符数组,保存着一个字符串以'\0'结尾。这个n可能大于字符串长度,也就是说字符串后面还有一些可用空间。
现在要求删除所有的'#',并且如果里面有'$',那么就将其变为'$$'。如果最后的长度大于n,则抛出异常。
要求in place完成。

例子:
"ab#c$d",n = 10
变为
"abc$$d"

想了好久没什么好想法,发上来求大神。

上一篇:CareerUp 5th Edition 高清扫描版本 [LINK]
下一篇:大家刷的都是CC之类的,,有 刷OJ的吗
🔗
doveonthewing 2013-12-20 23:09:12 | 只看该作者
全局:
1. 遍历一遍 计算最后的长度n_1, 如果n_1>n 则抛出异常
2. 遍历一遍 in place删掉所有的#
3. 从右向左遍历 in place double所有的$

O(n) 不知道有没有常数优化
回复

使用道具 举报

🔗
 楼主| OracleDesire 2013-12-21 09:32:18 | 只看该作者
全局:
doveonthewing 发表于 2013-12-20 23:09
1. 遍历一遍 计算最后的长度n_1, 如果n_1>n 则抛出异常
2. 遍历一遍 in place删掉所有的#
3. 从右向左遍历 ...

有几个地方不明白……如何in place删掉所有的#?
是删除后将后面的向前移动,还是就放着不动了?
double $的时候,附近的空位不够如何做?

谢谢
回复

使用道具 举报

🔗
doveonthewing 2013-12-21 10:07:15 | 只看该作者
全局:
OracleDesire 发表于 2013-12-21 09:32
有几个地方不明白……如何in place删掉所有的#?
是删除后将后面的向前移动,还是就放着不动了?
doubl ...

(1) 删除后把后面的向前移动
(2) 你已经知道n_1了 所以不会不够
回复

使用道具 举报

🔗
 楼主| OracleDesire 2013-12-21 10:20:46 | 只看该作者
全局:
doveonthewing 发表于 2013-12-21 10:07
(1) 删除后把后面的向前移动
(2) 你已经知道n_1了 所以不会不够

这是一个方法,但是这个方法复杂度太高,删除过程中无效的移来移去太多了,很可能不是面试时好的答案。
不知道还有没有什么高见?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表