字符串左右移动(java实现)

原创 2015年11月19日 20:44:12

给定一个字符串,这个字符串为*号和26个字母的任意组合。现在需要把字符串的*号都移动到最左侧,而把字符串中的字母移动到最右侧并保持相对顺序不变,要求时间复杂度和空间复杂度最小。

分析:用point表示尾部的第一个*的位置, let表示point之前的第一个字母的位置,依次交换point和let指向的元素,再找下一组*和字母的序列,直到point和let有一个指向字符串的首地址。

          从后往前扫描,把距*之前最近的字母相交换,可以保证次序。java代码如下:

import java.util.*;
class moveStr
{
	public static void moveChar(char[] ch,int len)
	{
		int point=len-1;
		int let=len-1;
		
		while(point!=0&&let!=0)   
		{
			while(ch[point]!='*'&&point!=0)  //first * from the end
			{
				point--;
			}
			if(point==0)             //all ch are *     
				return;
			let=point;
			while(ch[let]=='*'&&let!=0)   //the first letter before *
			{
				let--;
			}
			while(ch[let]!='*'&&ch[point]=='*')
			{
				char tem=ch[let];
				ch[let]=ch[point];
				ch[point]=tem;
				if(point!=0)
				   point--;
			   if(let!=0)
				   let--;
			}
		}		
	}
	public static void main(String[] args)
	{
		String str="abc**gh*58*r";
		char[] ch=str.toCharArray();
		moveChar(ch,str.length());
		System.out.println(ch);
	}
}


字符的左右移动-java

题目:字符串移动(字符串为号和26个字母的任意组合,把号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小.解析:主要问题是时间复杂度和空间复杂度,不过不考虑时间和空间复杂...
  • lwxdjk
  • lwxdjk
  • 2016年06月21日 11:23
  • 878

字符串右移n位

题目:实现字符串右移几位,即 abcd 移两位变 cdab  思路: 申请一个与待移位同样大小的数组,用来保存移位后的字符串通过公式计算出简化的移位数得到某字符移位后的新位置后,就将其字符...
  • cbs612537
  • cbs612537
  • 2012年11月22日 14:18
  • 5087

java字符串左移或右移几位(三次反转思想)

代码public class StringReversal { /** * 反转字符串(循环交换) * 其他字符串反转的方法 * 1、java的api:Strin...
  • zhaozhirongfree1111
  • zhaozhirongfree1111
  • 2017年05月03日 10:23
  • 1236

实现字符串循环右移n 位与左移n位(建立数组)

编写一个函数,作用是把一个 char 组成的字符串循环 右移 n 个。 比如原来是“abcdefghi” 如果 n=2,移位后应该是“hiabcdefgh”   左移n个 比如原来是“abcdef...
  • kai8wei
  • kai8wei
  • 2015年03月24日 12:41
  • 1113

输入m位字符串循环右移n位

题目:输入m位字符串循环右移n位,并输出 如:输入:abcdef 右移位数:3 输出:defabc 代码如下: C语言版: #include int main() { char a...
  • wx1458451310
  • wx1458451310
  • 2017年11月16日 22:55
  • 63

编写一个函数,把一个char组成的字符串循环右移n位

例如:把一个char 组成的字符串循环右移 n 位,原来是 ”abcdefghi“,如果 n = 2,移位后应该是 ”hiabcdefgh“ 函数头如下: /** @ pstr      指的是...
  • tkp2014
  • tkp2014
  • 2015年08月28日 14:53
  • 730

Java提高 - 字符串循环移位

问题,给你一个字符串,要求循环左移n位。比如对"abcdefg"循环左移2位,我们要得到"cdefgab"。附加条件,不能使用连续辅助空间(包括动态分配),只能使用若干单个变量(即O(1)空间)。 ...
  • wolflz
  • wolflz
  • 2015年05月14日 20:25
  • 1733

python_lintcode_简单题_8旋转字符_420报数_197排列序号

python× 8-旋转字符× 420报数× 197排列序号× lintcode×
  • xiongxu3381
  • xiongxu3381
  • 2017年08月09日 23:37
  • 380

旋转字符串

题目描述:给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例:对于字符串 "abcdefg". offset=0 => "abcdefg" offset=1 => "ga...
  • guoziqing506
  • guoziqing506
  • 2016年05月28日 21:06
  • 478

LintCode 8 旋转字符串

题目:rotateString要求:给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例:对于字符串 "abcdefg".offset=0 => "abcdefg" offset=1 ...
  • linglian0522
  • linglian0522
  • 2017年02月16日 15:56
  • 289
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串左右移动(java实现)
举报原因:
原因补充:

(最多只允许输入30个字)