关闭

剑指Offer之左旋转字符串(Move!Move!!Move!!!)

标签: 剑指Offer校园招聘面试
1513人阅读 评论(0) 收藏 举报
分类:

题目描述:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
输入:
多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。
输出:
对应每个测试案例,输出新序列。
样例输入:
UDBOJ 4
abba 1
样例输出:
JUDBO
bbaa
【解析】


思路源于前一篇文章思路:反转单词顺序

【代码】

/*********************************
*   日期:2013-12-02
*   作者:SJF0115
*   题号: 题目1362:左旋转字符串(Move!Move!!Move!!!)
*   来源:http://ac.jobdu.com/problem.php?pid=1362
*   结果:AC
*   来源:剑指Offer
*   总结:
**********************************/
#include <stdio.h>
#include <malloc.h>
#include <string.h>

char *str;

//反转单词
void ReverseWord(char* words,int begin,int end){
    int temp;
    if(words == NULL || begin > end || begin < 0){
        return;
    }
    //反转
    while(begin < end){
        temp = words[begin];
        words[begin] = words[end];
        words[end] = temp;
        begin ++;
        end --;
    }
}

char* Reverse(char* str,int n){
    if(str == NULL || n < 0){
        return "";
    }
    int len = strlen(str);
    //分成两部分(1)前n项(2)剩余项
    //反转前n个
    ReverseWord(str,0,n-1);
    //反转剩余
    ReverseWord(str,n,len-1);
    //全部反转
    ReverseWord(str,0,len-1);
    return str;
}


int main() {
    int i,n;
    str = (char*)malloc(sizeof(char)*1001);
    while(scanf("%s",str) != EOF){
        scanf("%d",&n);
        //左旋转
        //注意一下n需要取余就可以了,不能超过字符串自身的长度
        n = n % strlen(str);
        str = Reverse(str,n);
        //输出
        for(i = 0;i < strlen(str);i++){
            printf("%c",str[i]);
        }
        printf("\n");
    }//while
    return 0;
}


1
0
查看评论

九度_题目1362:左旋转字符串(Move!Move!!Move!!!)

题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定...
  • dfb198998
  • dfb198998
  • 2014-09-17 11:07
  • 606

九度 题目1362:左旋转字符串(Move!Move!!Move!!!)

题目来源:http://ac.jobdu.com/problem.php?pid=1362 时间限制:2 秒 内存限制:32 兆 特殊判题:否 提交:1060 解决:454 题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任...
  • Hearthougan
  • Hearthougan
  • 2014-05-26 11:29
  • 332

C++11中std::move的使用

C++11中std::move的使用
  • fengbingchun
  • fengbingchun
  • 2016-09-16 23:43
  • 3774

Axure当中move&nbsp;to和move&nbsp;by的区别

选择to,是将工具的位置移动到(x,y)坐标,原坐标以窗口左上角作为起始坐标; 选择by,是在工具的所处的坐标基础上,做(x,y)的累计移动,即以widget工具当前所处的坐标作为起始坐标进行移动。
  • baohanqing
  • baohanqing
  • 2013-12-30 20:46
  • 806

[C++11]_[初级]_[使用std::move移动对象资源]

场景: C++ 标准库使用比如vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了. C++11 提供了std::move 函数来把左值转换为xrvalue, 而且新版的push_ba...
  • infoworld
  • infoworld
  • 2016-02-25 11:59
  • 8657

C++ 11 右值引用以及std::move

新类型:          int和int&是什么?都是类型。int是整数类型,int&则是整数引用类型。同样int&&也是一个类型。两个引号&&是C++ 11提出的一个新的引用类型。记住,这是一个新...
  • luotuo44
  • luotuo44
  • 2015-07-07 00:05
  • 5571

delphi中move函数的正确理解

  我们能看到以下代码var pSource,pDest:PChar;     len: integer;.......................//一些代码Move(pSource,pDest,len); //错误Move(pSou...
  • tjb_1216
  • tjb_1216
  • 2009-10-02 14:43
  • 6913

九度OJ 1362 左旋转字符串(Move!Move!!Move!!!)【算法】

题目地址:http://ac.jobdu.com/problem.php?pid=1362 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=...
  • JDPlus
  • JDPlus
  • 2014-02-17 21:04
  • 1501

[unity-16] Character Controller的Move和SimpleMove的区别

下面是官方解释以及其翻译大意: CollisionFlags Move(Vector3 motion); Description A more complex move function taking absolute movemen...
  • shishengshi
  • shishengshi
  • 2014-11-23 22:16
  • 6884

关于c++默认的构造函数、析构函数、拷贝构造函数、move函数

在c++中,当我们定义一个类的时候,如果我们什么都不定义的时候,c++编译器会默认的为我们生成一些函数。 例如定义一个Example类。 class Example{ }; 当我们定义一个Example类的时候,不定义任何操作的时候,c++编译系统将为Example类生成如下默认操作函数: ...
  • lklzyy
  • lklzyy
  • 2014-12-22 20:10
  • 1463
    个人资料
    • 访问:1515560次
    • 积分:22595
    • 等级:
    • 排名:第379名
    • 原创:624篇
    • 转载:133篇
    • 译文:60篇
    • 评论:189条
    博客专栏
    文章分类
    最新评论