leetcode--字符串循环左移
来源:互联网 发布:网络专线多少钱一年 编辑:程序博客网 时间:2024/06/08 10:00
// convert_test.cpp : 定义控制台应用程序的入口点。//字符串循环左移问题#include "stdafx.h"#include<iostream>using namespace std;// 问题:给定一个字符串S[0...N-1],要求把S的前K个字符移动到S的尾部,比如字符串"abcdef",//前面两个字符 'a' 'b'移动到字符串的尾部,得到新字符串"cdefab",即字符串循环左移K。//注:循环左移k位和循环右移n-k位效果一致。//要求:时间复杂度O(n),空间复杂度O(1).void ReverseString(char* s, int from, int to){ while (from < to) { char t = s[from]; s[from++] = s[to]; s[to--] = t; }}void LeftRotateString(char* s, int n, int m){ //n为字符串长度,m为循环左移个数 m %= n; //注:循环左移n+k位和k位的效果相同,因为比如一个字符串长度为6,循环左移8位,结果和循环左移2位一致 ReverseString(s, 0, m - 1); //第一次copy,S[0...k]--T[0...k] ReverseString(s, m, n - 1);//第二次copy,S[k+1...N-1]--S[0...N-k-1] ReverseString(s, 0, n - 1);//第三次copy,T[0...k]--S[N-k...N]}int _tmain(int argc, _TCHAR* argv[]){ //顺便解释main中两个行参的意思,argc=argument count,argv=argumen value。 //char* argv[]是一个指针数组,这个数组的元素都是指针,argv[0]表示指向一个元素,*argv[0]表示取第一个元素。 //作用是命令行参数,例如命令行为 copy frompath to,由三个字符串组成,则int argv=3,* argv[0]代表"copy"这个字符串 char* s= "abcdef"; int n = 6; int m = 2; LeftRotateString(s, n, m); return 0;}
0 0
- leetcode--字符串循环左移
- 字符串循环左移
- 循环左移字符串
- 循环左移字符串
- 字符串循环左移
- 字符串循环左移
- 循环左移字符串
- 字符串循环左移
- 字符串循环左移
- 循环左移字符串
- 字符串循环左移
- 字符串循环左移
- 字符串循环左移
- 字符串循环左移
- 字符串循环左移
- 字符串循环左移
- 字符串循环左移
- 1362 循环左移字符串
- js多种方式实现图片预览
- mysql数据库导入导出
- 基础篇章:关于 React Native 之 Picker 组件的讲解
- (杂谈)防御网络欺骗,欢迎补充!!!
- 操作系统复习4
- leetcode--字符串循环左移
- 高精度算式计算(加法和乘法)
- 并查集 最小生成树
- ImageBrowser
- 如何提高思维能力,做一个有思想的人
- Java枚举使用方式和注意事项
- Java环境变量之Path和classpath
- Android中pull解析xml文件
- 基础篇章:React Native 之 TextInput 的讲解