算法设计--字符串偏移

最近准备校招,找了些设计题练练,顺便记录。

问题描述:将字符串向右偏移给定的偏移量,如abcd,偏移量2,则得到cdab。

思路:第一感觉是和数组插入很像。

数组插入过程:n长数组在i位置插入元素ele,从n-1下标开始逆向迭代,覆盖其下一个元素

for(int it=n;it>i;it--){

arr[it]=arr[it-1];

}

arr[i]=ele;

so,整理下思路,Java实现如下:

private static void shift(String s,int  offset){//向右偏移
		StringBuffer str=new StringBuffer(s);
		int len=str.length(),num=len;
		char start=str.charAt(0);//腾出数据偏移余地,保存原始数据
		offset=offset%len;		 //防止offset大于len

		int i=0;
		char tmp;
		while(--num>0){//循环len-1次
			tmp=str.charAt((i-offset+len)%len);//边界控制
			str.setCharAt(i, tmp);//将n-offset位置的数据覆盖到n位置
			i=(i-offset+len)%len;
		}
		str.setCharAt(i, start);//给腾出空间的0位置的数据安排房间
		System.out.println(str.toString());
	}

空间基本无消耗,时间复杂度为O(n)。

时间: 2024-10-29 19:10:11

算法设计--字符串偏移的相关文章

【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序将该字符串中的各个单词反序拼装并输出.例如,如果输入的字符串是"Hello, how do you do",那么输出的字符串为"do you do how Hello,".注意保留各个单词之间的空格及相应的标点符号. 二.算法设计 通过观察示例字符串(即"Hello, how do you do"),我们可以看到该字符串中各个单词与空格之间的关系为:单词总数=空格总数+1.也就是说,示例字符串中的空格总数为4

【字符串处理算法】回文判断的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序判断这个字符串是否是回文串. 为了便于说明,设定输入的字符串分为中文字符串和非中文字符串两种.其中,中文字符串中仅包含中文字符,非中文字符串中不包含中文字符. 所谓回文串,是指正读和反读都一样的字符串.下面举几个例子予以说明: 1."level"是一个非中文字符的回文串,因为正读和反读都是"level". 2."Good"不是一个非中文字符的回文串. 3."我爱我"是一个中文字符的回文串,

【字符串处理算法】字符串包含的算法设计及C代码实现【转】

转自:http://blog.csdn.net/zhouzhaoxiong1227/article/details/50679587 版权声明:本文为博主原创文章,对文章内容有任何意见或建议,欢迎与作者单独交流,作者QQ(微信):245924426. 一.需求描述 输入一个由数字构成的字符串,编写程序将该字符串转换为整数并输出. 例如,如果输入的字符串是“12345”,那么输出的整数是12345.注意,不要使用C语言的库函数atoi. 二.算法设计 我们都知道,如果给定一个整数123,那么其表示

【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序找出这个字符串中的最长连续字符,并求出其连续出现的次数. 例如,"123444445"中的最长连续字符是4,其连续出现的次数为5:"abcddef"中的最长连续字符是d,其连续出现的次数为2:"ab"中的最长连续字符是a,其连续出现的次数为1. 二.算法设计 我们可以采取逐个比较字符串中各个字符的办法来获取最长连续字符及其连续出现的次数.程序的总体流程如图1所示. 图1 程序的总体流程 三.特殊流程考虑 在编

【字符串处理算法】删除特定的字符的算法设计及C代码实现

一.需求描述 输入一个长字符串和一个短字符串,编写程序从长字符串中将在短字符串出现过的字符删除掉. 例如,长字符串为"1234abcd",短字符串为"3a",那么经程序处理之后的字符串为"124bcd":又如,长字符串为"good bye",短字符串为"obh",那么经程序处理之后的字符串为"gd ye". 二.算法设计 我们可以通过将长字符串中的字符逐个与短字符串中的字符相比较来判断是

【字符串处理算法】字符串包括的算法设计及C代码实现

一.需求描写叙述 给定一个长字符串和一个短字符串.编敲代码推断短字符串中的全部字符是否都在长字符串中.假设是,则长字符串包括短字符串:反之,不包括. 为了尽量包括大多数情况,字符串中能够包括大写和小写英文字母.数字和各种标点符号.而且区分大写和小写字母. 以下举几个样例予以说明: 1.假设长字符串是"ABCDE",短字符串是"ADC",那么短字符串中的全部字符都在长字符串中.即长字符串包括了短字符串. 2.假设长字符串是"ABCDE",短字符串是

AACOS:基于编译器和操作系统内核的算法设计与实现

AACOS:基于编译器和操作系统内核的算法设计与实现 [计算机科学技术] 谢晓啸 湖北省沙市中学 [关键词]: 编译原理,操作系统内核实现,算法与数据结构,算法优化 0.索引 1.引论 1.1研究内容 1.2研究目的 1.3研究提要 正文 2.1研究方法 2.2编译器部分 2.2.1从计算器程序中得到的编译器制作启示 2.2.2在编译器中其它具体代码的实现 2.2.3编译器中栈的高级应用 2.2.3编译器中树的高级应用 2.2.4编译器与有限状态机 2.3操作系统内核部分 2.3.1操作系统与底

字符串偏移

package 算法; import java.util.Arrays; import java.util.Scanner; public class 字符串偏移 { /* * param A: A string * param offset: Rotate string with offset. * return: Rotated string. */ public static void main(String[] args) { // String str = "abcdefg"

常用算法设计技术总结

算法,即计算的方法,使用计算的思想.方法.工具和技术来实现问题求解的思路和途径.计算机提供了计算的能力和硬件设施:算法则提供了计算的思想和软件技术,更好地发挥计算机的潜能. —— 引 有人说,算法无用,这种观点就如同盲人看不到花开就说世界上没有花一样,是一个长眼睛的人无论如何也难以接受的.举个简单的例子,假如你要对1000,000条记录进行排序,你的计算机每秒可处理1000,000 条记录, 那么, 如果你选择 O(nlogn)的快速排序,所花时间大约是 log2(1000000) = 20s,