字符串左移n位操作

 1 void reverse(char* str, int begin, int end)
 2 {
 3     char temp;
 4     for( ; begin < end; begin++)
 5     {
 6         temp = str[end];
 7         str[end] = str[begin];
 8         str[begin] = temp;
 9     }
10 }
11
12 void left_shift(char *str, int n, int k)
13 {
14     k=k% N;
15     reverse(str, 0, k -1);
16     reverse(str, k , n - 1);
17     reverse(str, 0, n - 1);
18 }

先把前n个字符串反转,再把后面的反转。最后再把整个字符串反转

时间: 2024-11-03 19:48:21

字符串左移n位操作的相关文章

字符串左移

1218: 字符串左移 时间限制: 1 Sec  内存限制: 2 MB提交: 27  解决: 10 标签提交统计讨论版 题目描述 给一个长度等于N的字符串,求它左移M位后的字符串. 输入 每组数据两行,第一行N M, 0<N<=1000,0<=M<=1500 第二行给出字符串,字符串只包含大小写字母. 输出 输出左移后的结果. 样例输入 6 3 NetCan 6 2 NetCan 10 4 HelloWorld 样例输出 CanNet tCanNe oWorldHell 一开始没注

1218: 字符串左移

From: 合工宣OJ  http://xcacm.hfut.edu.cn/problem.php?id=1218 时间限制: 1 Sec  内存限制: 2 MB 题目描述 给一个长度等于N的字符串,求它左移M位后的字符串. 输入 每组数据两行,第一行N M,0<=N<=1000,0<=M<=1500 第二行给出字符串,字符串只包含大小写字母. 输出 输出左移后的结果. 样例输入 6 3 NetCan 6 2 NetCan 10 4 HelloWorld 样例输出 CanNet t

[算法]字符串左移k位

如,abcde左移3位为deabc 要求时间复杂度O(n),空间复杂度O(1),每一个字符只能遍历一次 摘自http://blog.csdn.net/geniusluzh/article/details/8460031 利用数学解决该问题 其实对于这道题,最初一看的想法就是将当前位依次替换左移m位对应的那个位,然后依次替换.后来发现有的情况一次循环替换就能全部完成整个串的左移,而有的情况下会出现多个循环链,一时只得到规律,不能想到很好的证明办法,只怪以前初等数论没有好好学啊! 我们发现对于长度为

【算法】字符串左移函数的O(n)解法

例如,字符串 abcdef ,若要让def翻转到abc的前头,只要按照下述3个步骤操作即可: 首先将原字符串分为两个部分,即X:abc,Y:def: 将X反转,X->X^T,即得:abc->cba:将Y反转,Y->Y^T,即得:def->fed. 反转上述步骤得到的结果字符串X^TY^T,即反转字符串cbafed的两部分(cba和fed)给予反转,cbafed得到defabc,形式化表示为(X^TY^T)^T=YX,这就实现了整个反转.  这就是把字符串分为两个部分,先各自反转再整

左旋转字符串

题目 字符串左移k位后的结果 解题 旋转三次 public class Solution { public String LeftRotateString(String str,int n) { if(str == null || str.length() <=1) return str; int len= str.length(); n = n%len; char[] A = str.toCharArray(); reverse(A,0,len-1); reverse(A,0,len-n-1)

笔试面试4 字符串的循环移位算法

字符串的循环移位是指将整个字符串左移或者后移n位. 例如:ab1234左移两位就是1234ab. 这个算法的实现是利用三次反转. 仔细观察发现,左移和后移后,1234和ab的顺序是不变的. 将1234和ab看成两个整体. 左移可以通过以下变换得到. 先将ab反转,得到ba1234; 然后反转另一部分,1234,得到ba4321; 最后将整个反转,就得到了1234ab,即左移两位后的字符串. 代码实现为:(限定n的值为合法值,即n>=0&&n<strlen(str)) #incl

字符串旋转的若干种算法 (待续)

题目描述: 对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边. 给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果. 测试样例: "AbcdeFgh",8,4  (为了方便起见我把两部分的起始元素用大写字母表示) 返回:"FghAbcde" 思路: ·方法一:将整个字符串左移或右移(p - 1)次 ·方法二: 将要分成的前部分或后部分整体移动 ·方法三:利用栈 如: 先将FGH放置到前面,变成&

python基础之数字、字符串、列表、元组、字典

第二天Python基础二: 1.运算符: 判断某个东西是否在某个东西里面包含: in  为真 not in  为假 (1).算术运算符: 运算符 描述 实例 + 加  表示两个对象相加 a + b输出结果30 - 减  表示一个数减去另一个数 a - b输出结果-10 * 乘  两个数相乘或是返回一个被重复若干次的字符串 a * b输出结果200 / 除  两个数相除 b / a 输出结果2 ** 幂  返回一个数的n次幂 3 ** 3 输出结果27 % 取余  返回除法的余数 b % a 输出

redis学习笔记(11)---字符串命令及实现

对象类型与编码方式 对于字符串类型的命令,redis数据库会为每个对象创建一个字符串类型(REDIS_STRING)的对象. 对于字符串类型的对象,可以支持三种编码方式: #define REDIS_ENCODING_RAW 0 /* Raw representation */ #define REDIS_ENCODING_INT 1 /* Encoded as integer */ #define REDIS_ENCODING_EMBSTR 8 /* Embedded sds string e