第二十六题(字符串左旋)
来源:互联网 发布:应用宝 软件著作权 编辑:程序博客网 时间:2024/04/30 10:55
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;}
0 0
- 第二十六题(字符串左旋)
- 【100题】第二十六 左旋转字符串
- 左旋转字符串 【微软面试100题 第二十六题】
- 左旋转字符串 【微软面试100题 第二十六题】
- 微软100题(第二十六题)
- 左旋(右旋)字符串
- 第三章第二十六题
- 第三章第二十六题
- 面试热门题:字符串左旋右旋
- 微软面试100题---左旋字符串
- 编程珠玑(二)字符串左旋
- 左旋字符串问题(有点料)
- 左旋字符串
- 左旋字符串
- 左旋字符串源码
- 左旋字符串算法
- 左旋字符串
- 左旋字符串
- hdu1027 Ignatius and the Princess II (全排列 & STL中的神器)
- 队列(链表形式)实现_c++
- 面试必备十大算法
- swift http请求返回json数据并解析
- 黑马书写格式
- 第二十六题(字符串左旋)
- C++ socket 线程
- opengl 坐标系
- 为什么C语言中的的数组是从0开始的?
- linux 常用命令
- 提示iconv.h文件找不到问题
- MATALB程序调试
- 【Android开发】 物理Menu 呼出 ActionBar中隐藏菜单的实现方式
- 利用DHT网络原理制作bt采集蜘蛛,开源版