第二十六题(字符串左旋)
26.左旋转字符串
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n 的字符串操作的复杂度为O(n),辅助内存为O(1)。
解答:
采用先局部翻转再整体翻转的方法,例如:字符串abcdef,左旋两位:
先对ab,和cdef做局部翻转得到bafedc
再对bafedc做整体翻转得到cdefab
代码:
#include "stdafx.h" #include<iostream> using namespace std; namespace MS100P_26 { //先分别翻转字符串ab,cdef,再整体翻转 void leftShift1(char *s, int n) { int length = strlen(s); int temp; for (int i = 0; i < n/2; i++) //局部翻转1 { temp = s[i]; s[i] = s[n - i - 1]; s[n - i - 1] = temp; } for (int i = n; i < n+(length-n)/2; i++) //局部翻转2 { temp = s[i]; s[i] = s[length-i+n-1]; s[length - i + n - 1] = temp; } for (int i = 0; i < length/2; i++) //整体翻转 { temp = s[i]; s[i] = s[length - i - 1]; s[length - i - 1] = temp; } } void test() { char str[] = "abcdef"; cout << str << endl; leftShift1(str, 3); cout << str << endl; } } int _tmain(int argc, _TCHAR* argv[]) { MS100P_26::test(); return 0; }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了