时间:2014.04.29
地点:基地二楼
----------------------------------------------------------------------------------------------
一、题目
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。
-------------------------------------------------------------
二、思路
假设有 abcdef12345,我们想将abcdef放置12345通过左旋转放置abcdef后面
即形成 12345abcdef
我们分析:现在数子字符在前面了,字母字符在后面了,这相当于将原字符串数字部分和字母部分对换了一下
我们知道,如果分别将数字字符部分和字母字符部分逆序可形成:
fedcba和54321
我们将上面从后面往前面度,也就是说如果在将这两部分结合起来逆序就是
12345abcdef
于是归纳起来就是要写一个字符串逆转函数,先将前部分逆转,再将后部分逆转,在整体逆转
时间复杂度为O(n)
-------------------------------------------------------------
三、源码实现
#include<iostream> using namespace std; void Reverce(char arr[], size_t left, size_t right) { char temp; for (;left < right;++left,--right) { temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } } void LeftRotationString(char arr[], size_t size, size_t count) { Reverce(arr, 0, count - 1); Reverce(arr, count, size - 1); Reverce(arr, 0, size - 1); } int main() { char arr[] = { ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘, ‘h‘ }; LeftRotationString(arr, 8, 3); for (auto e : arr) cout << static_cast<char>(e) << endl; }
微软之左旋转字符串,码迷,mamicode.com
时间: 2024-10-18 17:26:32