如何左旋转字符串

题目描述:

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

输入:

多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。

输出:

对应每个测试案例,输出新序列。

样例输入:

UDBOJ 4

abba 1

样例输出:

JUDBO

bbaa

这道题之前在Cracking the Coding interview上做过类似的,一样的三次反转,即可得到,时间复杂度为O(n),空间复杂度为O(1)。这道题在九度OJ上测试,主要要考虑移动的位数大于字符串长度时的情况,取余即可。

AC代码如下:

#include<stdio.h>
#include<string.h>  

void Swap(char *a,char *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}  

/*
翻转字符串中从start到end的这部分
*/
void ReverseString(char *str,int start,int end)
{
    while(start < end)
    {
        Swap(&str[start],&str[end]);
        start++;
        end--;
    }
}  

/*
求左旋k位后得到的字符
本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
*/
void ROLString(char *str,int k)
{
    if(str == NULL || k<=0)
        return;  

    int len = strlen(str);
    //要考虑k大于len的情况
    k = k%len;
    if(k == 0)
        return;  

    ReverseString(str,0,k-1);
    ReverseString(str,k,len-1);
    ReverseString(str,0,len-1);
}  

int main()
{
    char str[1010];
    int k;
    while(scanf("%s %d",str,&k) != EOF)
    {
        ROLString(str,k);
        puts(str);
    }
    return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串
, 测试
, oj
, 字符
, 字符串转时间
, 输出
, start
, 序列
, 这道题怎么用 语言做
, 循环移位
, int转时间
, 左旋转
字符串转int
左旋转字符串、字符串旋转、lintcode 旋转字符串、字符串的旋转、图片如何批量左右旋转,以便于您获取更多的相关知识。

时间: 2024-08-13 18:01:14

如何左旋转字符串的相关文章

剑指Offer详解之左旋转字符串

(1)暴力移位法 这种方法可能是最直观,最容易想出的方法.但这也是最坏的方法.时间复杂度挺高,用这种方法容易超时. 这种方法是一位一位的移动实现左旋转操作. [代码] #include <stdio.h> #include <malloc.h> #include <string.h> char *str; char* Reverse(char* str,int n){ if(str == NULL || n < 0){ return ""; }

C语言左旋转字符串与翻转字符串中单词顺序的方法_C 语言

左旋转字符串题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串 abcdef  左旋转 2  位得到字符串 cdefab.请实现字符串左旋转的函数. 要求时间对长度为 n  的字符串操作的复杂度为 O(n),辅助内存为 O(1). 分析: 网上看到解法很多种,就不详细说明了. 我采用的是数组不对称的交换时间复杂度应该是O(n). 代码实现(GCC编译通过): #include "stdio.h" #include "stdlib.h&qu

【8】左旋转字符串

题目:字符串的左旋转指的是把字符串前面若干个字符转移到字符串的尾部.例如输入字符串"abcdefg"和2,左旋转的结果就是"cdefgab" 方案一:常规作法利用一个O(n)的辅助空间,在利用O(n)的时间枚举字符串把字符串重新存储到新的辅助空间中. 方案二:先把字符串分成两部分,例如题目中分成"ab"和"cdefg":对这两部分进行翻转得到字符串"bagfedc":对整个字符串进行翻转得到"cd

java之左旋转字符串介绍_java

题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部.如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数.要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1). 分析:如果不考虑时间和空间复杂度的限制,最简单的方法莫过于把这道题看成是把字符串分成前后两部分,通过旋转操作把这两个部分交换位置.于是我们可以新开辟一块长度为n+1的辅助空间,把原字符串后半部分拷贝到新空间的前半部分,在把原字符串的前半部分拷贝到新空间的后半部分.不难看出

剑指offer系列之四十五:左旋转字符串

题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 同上一题思路差不多,可以把需要左旋的字符串看成一部分,其他的字符串看成另一部分,比如字符串"abcdef",需要输出左移2位的结果,可以把字符串&q

《剑指offer》-左旋转字符串

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 基本的字符串子串和拼接.C++里的string的substr(int start_index, int count) 起始索引和数量. 这种题目就喜欢在细节上挖坑,比如字符串长度

ios-剪裁图片导致图片向左旋转

问题描述 剪裁图片导致图片向左旋转 做了一个剪裁图片的程序,调用剪裁: UIImage* croppedImage = [self imageCrop:imageView toRect:CGRectMake(10.0 50.0 320 100)]; 方法: { //create a context to do our clipping in CGRect newRect = CGRectApplyAffineTransform(rect imageViewToCrop.transform); U

javascript正则匹配从左往右等于从右往左的字符串

问题描述 javascript正则匹配从左往右等于从右往左的字符串 如果需要匹配一个从左往右读,或者从右往左读都一样的文本该如何匹配? 例如: abcdefgfedcba 解决方案 alert(/^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?987654321$/.test('abcdefgfedcba')) http://blog.csdn.net/wusuopubupt/article/details/17507401

c++-C++实现一个箭形图形的旋转,Left箭头朝左旋转后移动

问题描述 C++实现一个箭形图形的旋转,Left箭头朝左旋转后移动 C++实现一个箭形图形的旋转,Left箭头朝左,Up or Down向箭头指向的方向移动或者相反的方向后退.Right按键同理. 解决方案 纯CSS实现箭头旋转 解决方案二: 你写一个函数,根据一个角度绘制一个箭头(用三角函数知识不难做吧,就是算出4条线的起讫坐标) 主程序根据键盘按键加减这个角度,并且重新绘图. 解决方案三: 这个要看你用什么做了,在什么平台上做,用什么编译器, 你写一个函数,根据一个角度绘制一个箭头(用三角函