字符串移动k位的时间复杂度o(n)空间复杂度o(1)的解法

对于一个长度为n的字符串,将其左移或右移k位,在此以右移为例。

1.将字符串分成2段,1段是从左计算的长度n-k的段 另一段是剩下的长度为k的串

2.先将第一段与第二段的最后长度为n-k的部分交换;

3.再将原第二段的最后长度n-k的段变换为对称串(即刚交换到前方的部分);

4.再将第二段没动过的部分做对称变换;

5.最后将3 4步骤中的串视为一个串做对称变换 完成。

若k比n大,只需右移k mod n即可。

左移和右移思路一样,不再赘述。

对长度为n的串做对称变换需要时间是n/2 对2个长度为n的串交换需要时间为n,

移动一共需要时间为 (n-k)+(n-k)/2+(k-(n-k))/2+k/2=n

所以时间复杂性为o(n), 交换至多用常数空间,变换不需额外空间。所以空间复杂性为o(1)。

















++


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值