• 【剑指offer】左旋转字符串


    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27366485

    题目描写叙述:
    汇编语言中有一种移位指令叫做循环左移(ROL),如今有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。比如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是非常easy?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位后得到的字符
    */
    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;
    }
    /**************************************************************
        Problem: 1362
        User: mmc_maodun
        Language: C
        Result: Accepted
        Time:60 ms
        Memory:912 kb
    ****************************************************************/

  • 相关阅读:
    各个控件说明
    html常用
    abp.message
    ABP框架——单表实体流程
    AngularJS $http和$.ajax
    AngularJS ng-if使用
    AngularJS 多级下拉框
    AngularJS 计时器
    AngularJS table循环数据
    Python之待学习记录
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4045228.html
Copyright © 2020-2023  润新知