字符串的左旋转

问题重述:实现一个

函数,可以左旋字符串k个字符。例如:

abcdef左旋2得到cdefab

方法一:暴力旋转法

#include<stdio.h>
#include<string.h>
void left_remove(char *arr,int n)
{

	int i=0;
	int j=0;
	char ch=0;
	int len=strlen(arr);
	for(i=0;i<n;i++)  //左旋的个数
	{
		ch=arr[0];    //保存第一个字符
		for(j=0;j<len-1;j++)
		{
	     	arr[j]=arr[j+1];
		}
		arr[len-1]=ch;
	}
}

int main()
{
	char arr[]="abcdef";  //abcdef-->bcdefa-->cdefab
	int n=0;
	scanf("%d",&n);
	left_remove(arr,n);
	printf("%s\n",arr);
	return 0;
}

方法一:三步旋转法

初始状态:

a b c d e f

第一步:翻转a,b

b a c d e f

第二步:翻转c,d,e,f

b a f e d c

第三步:全部翻转

c d e f a b
#include<stdio.h>
#include<string.h>
void change(char *left,char *right)
{
	int temp=0;
	while(left<right)
	{
		temp=*left;
		*left=*right;
		*right=temp;
		left++;
		right--;
	}
}
void left_remove(char *p,int n)
{                                //abcdef
	int len=strlen(p);   
	change(p,p+n-1);             //bacdef
	change(p+n,p+len-1);         //bafedc
	change(p,p+len-1);           //cdefab
}
int main()
{
    char arr[]="abcdef";  
	int n=0;
	scanf("%d",&n);
	left_remove(arr,n);
	printf("%s\n",arr);
	return 0;
}
时间: 2024-10-15 11:46:10

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

【微软100题】定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。

package test; /** * 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef左旋转2位得到字符串cdefab. 请实现字符串左旋转的函数. * 要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1). * * @author Zealot * */ public class MS_26 { private void rotateString(String s, int rotate) { System.out.println(

判断一个字符串经过左旋转之后,是否对称

public static void main(String[] args) { System.out.println(methodC("abccbazx")); System.out.println(methodC("abccbaz")); System.out.println(methodD("abccbazx",0)); System.out.println(methodD("abccbaz",0)); } //方法A,

翻转字符串和左旋转字符串

左旋转: class Solution { public: string LeftRotateString(string str, int n) { int length = str.size(); if(length <= 1 || n <= 0) return str; reverse(str,0,length-1); reverse(str,0,length-1-n); reverse(str,length-n,length-1); return str; } void reverse(

剑指offer—左旋转字符串

题目:字符串的左旋转操作时把字符串前面的若干个字符转移到字符串尾部.请定义一个函数实现字符串左旋转操作的功能.比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到结果"cdefgab" 对于这一道题,按照普通的思想我们的想法一般都是先把字符a取出来,然后把后面你的字符串向前移动,然后把a放到最后.然后依次再把b进行一次,就可以了. 代码: #include<stdio.h> #include<stdlib.h> #includ

翻转单词顺序 VS 左旋转字符串

全部内容来自<剑指offer>. 题目一: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字符一样处理.例如输入字符串“I am a student.”,则输出 “student. a am I”. ANSWER: void reverse(char *pBegin, char *pEnd) { if (pBegin == NULL || pEnd == NULL) return; while (pBegin < pEnd) { char tm

【编程题目】左旋转字符串 ☆

26.左旋转字符串(字符串)题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部.如把字符串 abcdef 左旋转 2 位得到字符串 cdefab.请实现字符串左旋转的函数.要求时间对长度为 n 的字符串操作的复杂度为 O(n),辅助内存为 O(1). 思路: 设字符串为 abcdefg 要左旋两个, $$表示操作范围,|表示要旋转的轴线,将操作范围分为两个部分.每次把范围小的部分与范围大的部分的靠近|的位置交换.范围相同则直接交换. 1. $ab|cdefg$ 2    

编程算法 - 左旋转字符串 代码(C)

左旋转字符串 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部. 请定义一个函数实现字符串左旋转操作的功能. 编程珠玑, 首先翻转前部分, 再翻转后部分, 最后全部翻转. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio

翻转单词顺序与左旋转字符串

题目一:输入一个英文句子,翻转句子中单词的顺序.但是单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student.",则输出"student. a am I". 分析:经典题目.先将整句翻转,再将每个单词翻转就可以了. 实现如下: void Reverse(char* pBegin,char* pEnd) {     if(pBegin==NULL||pEnd==NULL)         return;        

【程序员编程艺术】学习记录1:左旋转字符串之指针翻转法

[程序员编程艺术]学习记录1:左旋转字符串之指针翻转法 题目:左旋转字符串 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(n) 思路一.暴力移位法 //暴力移位法 void leftshiftone(char *s, int n) { char t = s[0]; for(int i = 1;i < n; i++) s[i-1]