左旋字符
2018-02-28 20:31
190 查看
1.实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
分析:左旋一个字符可以理解为左旋两次,左旋两个字符可以理解为左旋2次。那左旋一次就相当于将除了最左边一个字符,其余字符向左移动一个位置,然后把最左边字符放在最右边,如将ABCD左旋一次,将BCD向左移动一个位置,A放在最右边;左旋两次相当于除了左边两个字符,其余字符向左移动一个位置,然后把左边两个字符一次放在右边....
那么对于左旋ABCD,左旋一次BCDA,左旋两次CDAB,左旋三次DABC,左旋四次ABCD,左旋五次BCDA。由此发现左旋4次就恢复原始字符串,左旋5次就相当于左旋1(5%4)次,那么结论是,有效左旋次数等于左旋次数%字符串长度。
方案一:左旋概念:
结果为:
方案二:逆置
左旋ABCD两次
将ABCD分为两部分,一部分是AB,另一部分是CD
逆置AB BACD 即 (str----str+2-1) 推广为:(str---str+count-1)(count为有效左旋次数)
逆置CD BADC 即 (str+2----str+4-1) 推广为:(str+count-----str+len-1)(len为字符串长度)
整体逆置 BADC CDAB 即 (str------str+4-1) 推广为: (str-----str+len-1)
代码如下:
结果为:
方案三:拼接字符串
左旋ABCD
拼接为:ABCDABCD,若左旋两次,将指针指向C(str+2),然后再从C向后连续输4(len),那么就为CDAB即为左旋两次结果。
这种方法称为穷举,也就是将左旋结果全部列出。
结果为:
三种方法建议选择第二种方法。
那么右旋呢?
那右旋一次就相当于将除了最右边一个字符,其余字符向右移动一个位置,然后把最右边字符放在最左边,如将ABCD左旋一次,将ABCD向右移动一个位置,D放在最右边;右旋两次相当于除了右边两个字符,其余字符向右移动一个位置,然后把右边两个字符依次放在左边....那么对于右旋ABCD,右旋一次DABC,左旋两次CDAB,左旋三次BCDA,左旋四次ABCD,左旋五次DABC。由此发现右旋4次就恢复原始字符串,右旋5次就相当于右旋1(5%4)次,那么结论是,有效右旋次数等于右旋次数%字符串长度。
4000
方案一:右旋概念:
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
由左旋方法说三可知,拼接后的字符串为左旋的所以结果,所以可以利用strstr函数:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
分析:左旋一个字符可以理解为左旋两次,左旋两个字符可以理解为左旋2次。那左旋一次就相当于将除了最左边一个字符,其余字符向左移动一个位置,然后把最左边字符放在最右边,如将ABCD左旋一次,将BCD向左移动一个位置,A放在最右边;左旋两次相当于除了左边两个字符,其余字符向左移动一个位置,然后把左边两个字符一次放在右边....
那么对于左旋ABCD,左旋一次BCDA,左旋两次CDAB,左旋三次DABC,左旋四次ABCD,左旋五次BCDA。由此发现左旋4次就恢复原始字符串,左旋5次就相当于左旋1(5%4)次,那么结论是,有效左旋次数等于左旋次数%字符串长度。
方案一:左旋概念:
结果为:
方案二:逆置
左旋ABCD两次
将ABCD分为两部分,一部分是AB,另一部分是CD
逆置AB BACD 即 (str----str+2-1) 推广为:(str---str+count-1)(count为有效左旋次数)
逆置CD BADC 即 (str+2----str+4-1) 推广为:(str+count-----str+len-1)(len为字符串长度)
整体逆置 BADC CDAB 即 (str------str+4-1) 推广为: (str-----str+len-1)
代码如下:
结果为:
方案三:拼接字符串
左旋ABCD
拼接为:ABCDABCD,若左旋两次,将指针指向C(str+2),然后再从C向后连续输4(len),那么就为CDAB即为左旋两次结果。
这种方法称为穷举,也就是将左旋结果全部列出。
结果为:
三种方法建议选择第二种方法。
那么右旋呢?
那右旋一次就相当于将除了最右边一个字符,其余字符向右移动一个位置,然后把最右边字符放在最左边,如将ABCD左旋一次,将ABCD向右移动一个位置,D放在最右边;右旋两次相当于除了右边两个字符,其余字符向右移动一个位置,然后把右边两个字符依次放在左边....那么对于右旋ABCD,右旋一次DABC,左旋两次CDAB,左旋三次BCDA,左旋四次ABCD,左旋五次DABC。由此发现右旋4次就恢复原始字符串,右旋5次就相当于右旋1(5%4)次,那么结论是,有效右旋次数等于右旋次数%字符串长度。
4000
方案一:右旋概念:
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
由左旋方法说三可知,拼接后的字符串为左旋的所以结果,所以可以利用strstr函数:
相关文章推荐
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- 【Ex.】实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- .实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- 实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符。
- 将一个字符串,左旋N个字符
- 将一个字符串的前n个字符旋转到后面,采用左旋,或者右旋。
- 字符的左旋
- 左旋字符串k个字符
- 实现一个函数,可以左旋字符串中的k个字符。
- 1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- 三种方法实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符
- c语言左旋字符串中的k个字符
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- C语言--左旋字符串中的K个字符
- 左旋字符
- C语言:将一个字符串左旋任意(K)个字符