一个字符串只包含*和数字,请把它的*号都放开头。

方法1 快排partition——数字相对顺序会变化
循环不变式: [0…i – 1]都是*, [i…j – 1]是数字,[j…n – 1]未探测
for (int i = 0, j = 0; j < n; ++j)
if (s[j] == ‘*’) swap(s[i++], s[j]);

样例 0124
i=0, j = 0, 012
4 交换s[0],不变,i = 1
i=1, j = 1, 0124 不变
i = 1, j = 2, 012
4 不变
i=1, j = 3, 交换s[1],s[3]变为 1024 并且i = 2
i=2, j = 4,**102
4不变
i = 2, j = 5, 交换s[2],s[5]变为
*0214 且i = 3
再往后没变化了

方法2 数字相对顺序不变
“倒着”
int j = n – 1;
 for (int i = n – 1; i >= 0; --i)
   if (isdigit(s[i])) s[j–] = s[i];
 for (; j >= 0; --j) s[j] = ‘*’;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值