字符串左移

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

一开始没注意M的范围大于N

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
    int len,n,i;
    char a[1001];
    while(~scanf("%d%d",&len,&n))
    {
        n=n%len;
        scanf("%s",a);
        for(i=n;i<len;i++)
            printf("%c",a[i]);
        for(i=0;i<n;i++)
            printf("%c",a[i]);
        cout<<endl;
    }
}
时间: 2024-08-23 08:06:10

字符串左移的相关文章

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位对应的那个位,然后依次替换.后来发现有的情况一次循环替换就能全部完成整个串的左移,而有的情况下会出现多个循环链,一时只得到规律,不能想到很好的证明办法,只怪以前初等数论没有好好学啊! 我们发现对于长度为

字符串左移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,

【算法】字符串左移函数的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 输出

三种方法实现一个函数,可以左旋字符串中的k个字符

例如:abcd左旋一个字符得到bcda,abcd左旋两个字符得到cdab1.数组下标法 #include<stdio.h> #include<string.h> void left_handed(char *str, int k) { int i; int count = 0; char temp; while (count < k) { temp = str[0]; for (i = 0; i < strlen(str)-1; i++) { str[i] = str[