字符串移位

字符串循环移位:假设有一串字符串a,b,c,d,e,f,g,h,向左循环移位2为,得c,d,e,f,g,h,a,b。

#include<iostream>
using namespace std;

void reverse(char* a, int start, int len){
	int count = 0;

	for(int i = start, j = start + len -1; ; ++i, --j){
		if((++count) <= len/2){
			a[i] = a[i] + a[j];
			a[j] = a[i] - a[j];
			a[i] = a[i] - a[j];
		}else{
			break;
		}
	}
}

void transposition(char* a, int n, int len){
	reverse(a,0,len);
	reverse(a,0,len-n);
	reverse(a,len-n,n);
}

void main(){
	char a[] = {'a','b','c','d','e','f','g','h'};
	int len = sizeof(a);
	transposition(a,9%len,len);
	for(int i = 0; i < len; ++i){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

结果:

时间: 2024-12-20 15:00:58

字符串移位的相关文章

算法--字符串移位问题

转载请标明出处http://www.cnblogs.com/haozhengfei/p/d06ff7b10334cd17ec014764b96790ca.html 字符串移位问题 字符串移位练习题 第7节 字符串移位练习题 对于一个字符串,请设计一个算法,将字符串的长度为len的前缀平移到字符串的最后. 给定一个字符串A和它的长度,同时给定len,请返回平移后的字符串. 测试样例: "ABCDE",5,3 返回:"DEABC" Java (javac 1.7) 代码

编程之美之字符串移位包含问题

[题目] 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含.例如,S1=AABCD和s2=CDAA,返回true:给定s1=ABCD和s2=ACBD,返回false. [分析] [思路一] 从题目中可以看出,我们可以使用最直接的方法对S1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性. 字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O(n*m),总体复杂度为O(n*n*m). 字符串包含判断,若采

CareerCup之1.8 字符串移位包含问题

[题目] 原文: 1.8 Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring ( i.e., "waterbottle" is a rotat

第3章 结构之法——字符串移位包含的问题

字符串移位包含的问题 问题描述 分析与解法 [解法一] 具体代码如下: 1 package chapter3jiegouzhifa.QuestionOfStringMove; 2 /** 3 * 字符串移位包含的问题 4 * [解法一] 5 * @author DELL 6 * 7 */ 8 public class StringMove { 9 /** 10 * 寻找移位后的字串(左移) 11 * @param src 源字符串 12 * @param des 要查找的子串 13 * @ret

字符串移位包含的问题——解题笔记

字符串移位包含的问题--解题笔记 题目描述:给定两个字符串s1和s2,要求判定s2时候能够被s1做循环移位(rotate)得到的字符串包含.例如,给定s1=AABCD和s2=CDAA,返回true:给定s1=ABCD和s2=ACBD,返回false. solution 1: 直接的方法,把串s1遍历所有移位之后的情况,每种情况都判断一遍时候包含s2. 分析:这种情况在s1串很长的情况不好,需要遍历的情况太多. solution 2:注意到s1串移位之后会出现循环的情况,而循环也就是s1串的重复放

字符串移位包含的问题

/* * 字符串移位包含的问题 * 给定两个字符串,要求判定s2是否能够被s1叫做循环移位得到的字符串包含. * 例如给定 s1=AABCD,s2=CDAA,返回true; * 给定 S1=ABCD, s2=ABCD,返回false*/ public class QuestionAlia{ //方法 一: 利用java的 substring()及startsWith()方法 public static boolean isXunHuan(String text,String query){ fo

第三章结构之法--------字符串移位包含

字符串移位包含的问题 给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位(rotate)得到的字符串包含. 例如,给定s1=AABCD和s2=CDAA,s1可以通过向右移动两位,s1------>BCDAA,使得s1包含s2,返回true. 而对于s1=ABCD和s2=ACBD,无论s1怎么移动,都无法包含s2,则返回false. 分析与解法 解法1: 这一道题,一开始我并没有想到什么好的解题思路.首先想到的是用暴力枚举的方法,将所有移位后字符串都 列举出来,在进行判断.并且移动的次

Openjudge-NOI题库-字符串移位包含问题

题目描述 Description 对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串. 给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串.例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串. 输入输出格式 Input/output 输入: 一行,包含两个字符串,中间由单个空格隔开.字符串只包含字母和数字,长度不超过30. 输

字符串移位[源:《编程之美》]

<编程之美>221页,问题:字符串scr=“AABCD”,字符串des="CDAA",移位src,是否包含串des?这本书今天初看,随便翻了几页,先不说问题,光是这本书排版就出现很多错误!马上感觉这本书失了水准,可能是印刷问题吧.比如,char src[5]="AABCD"...之类 记录这个小题,因为联想到昨天学的直接插入排序,也是在数组中相邻两两之间移动,顺便把它收录了,所谓题不厌多,只要类型相同,就归纳在一起! 首先考虑的是移位的问题,有两种可能,

编程之美3.1 字符串移位包含问题

      这道题目的意思是给定一个字符串,作为源字符串,之后给出其他的字符串,确定源字符串是否能够经过旋转而得到给定的字符串,即移位包含问题.       假如,给定一个字符串 abcdefg,接着给定字符串 cdefgab,很显然,给定的字符串是可以经过源字符串旋转而得到的,但是,给定字符串 cdegfab 就不能由源字符串经过旋转而得到.       当然,这道题有很多解法,我们可以经过判断字符串中字符的位置而得到答案,但是,那样做确实是太麻烦了,有更好的解法吗?当然,我们看下两个字符串的