IT公司100题-26-左旋转字符串
2014-08-21 16:46
211 查看
问题描述:
给定字符串和左旋的字符数,写程序实现字符串的左旋操作。例如对于字符串”12345678″, 左旋转4个字符后,变成”56781234″。要求时间复杂度为O(n),空间复杂度O(1)。
分析:
假设字符串表示为XY,X表示需要左旋的部分,左旋后字符串表示为YX。
根据公式:
代码实现:
输出:
给定字符串和左旋的字符数,写程序实现字符串的左旋操作。例如对于字符串”12345678″, 左旋转4个字符后,变成”56781234″。要求时间复杂度为O(n),空间复杂度O(1)。
分析:
假设字符串表示为XY,X表示需要左旋的部分,左旋后字符串表示为YX。
根据公式:
代码实现:
// 26.cc #include <iostream> #include <string> #include <cstring> using namespace std; // 反转字符串 void reverse_str(char* start, char* end) { if (!start || !end) return; while (start < end) { swap(*start, *end); start++; end--; } } // 左移k个字符 void left_rotate_str(char*& str, size_t k) { if (!str || k <= 0) return; size_t n = strlen(str); k = k % n; reverse_str(str, str + k - 1); reverse_str(str + k, str + n - 1); reverse_str(str, str + n - 1); } int main() { cout << "input a str:" << endl; string s; getline(cin, s); char* str = new char[s.size() + 1]; strcpy(str, s.c_str()); int k = 5 < s.size() ? 5 : 0; left_rotate_str(str, k); cout << "after left rotate " << k << " chars:" << endl << str << endl; return 0; }
输出:
$ ./a.exe input a str: 12345678 after left rotate 5 chars: 67812345
相关文章推荐
- IT公司100题-26-左旋转字符串
- 微软面试100题之26题:左旋转字符串
- 微软100题(26)左旋转字符串
- 微软算法100题26 左旋转字符串
- 左旋转字符串 【微软面试100题 第二十六题】
- 程序员面试题精选100题(21)-左旋转字符串
- 100题_21 左旋转字符串
- 程序员面试题精选100题(21)-左旋转字符串[算法]
- 程序员面试题100题第21题——左旋转字符串
- 算法习题26:定义字符串的左旋转操作,把字符串前面的若干个字符移动到字符串的尾部
- 26、左旋转字符串
- 程序员面试题精选100题(21)-左旋转字符串
- 26.左旋转字符串
- 左旋转字符串(26)
- 程序员面试题精选100题(21)-左旋转字符串[算法]
- 26.左旋转字符串(字符串)
- 26.左旋转字符串
- 程序员面试题100题第21题——左旋转字符串
- 26 左旋转操作:把字符串前面的若干个字符移动到尾部
- Solution 26: 左旋转字符串