左旋字符串(c语言)

题目1:实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

法一:暴力解法,以abcdef变成bcdefa为例,写循环把a存到tmp里然后
把bcdef往前移,最后把a放到最后

代码如下:

 法二:以abcdef变成cdefab为例
首先ab倒序变成bacdef,然后cdef倒序变成bafedc,然后整个倒序变成cdefab(三步倒序法)

代码如下:

题目2:

 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1

给定s1 = abcd和s2 = ACBD,返回0.
AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

 思路:

法一:暴力解法,我们以cdefab是否由abcdef左旋k个字符而来为例,可以有上面代码写的left_relove函数,然后,将abcdef从1个字符左旋开始,然后左旋2个,知道左旋到abcdef的长度也就是6个字符为止,如果过程中左旋第k个字符时,两个字符串相等,则可以说明cdefab是否由abcdef左旋k个字符而来

法二:我们以cdefab是否由abcdef左旋k个字符而来为例,我们可以把abcdef追加自身变成abcdefabcdef;这样abcdef左旋k个字符后的结果一定是abcdefabcdef的子字符串,所以只要判断cdefab是否是abcdefabcdef的子字符串即可,当然还要判断追加前abcdef和cdefab是否相等,如果不等就不可能是左旋的来的

法一有兴趣的人可以自己去实现下,这里提供法二的代码:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值