您的位置:首页 > 编程语言 > Java开发

字符的左右移动-java

2016-06-21 11:23 302 查看

题目:

字符串移动(字符串为’*’号和26个字母的任意组合,把’*’号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小.

解析:

主要问题是时间复杂度和空间复杂度,不过不考虑时间和空间复杂度,可以另外建立两个字符数组,把’*’和非’*’,分别放进去,再组合成字符串,就可以了.

那么要保持时间复杂度为(n),空间复杂度为(1),就需要进一步考虑.思路就是设定一个下标i指向字符串第一个非’*’的位置,然后设定遍历下标k为i的前一个,遍历字符串,如果为’*’,那么不做处理,如果为非’*’,那么交换下标i和下标k的字符值,然后让i向前移动一个,保持指向第一个’*’.

import  java.util.*;

public  class Main{
public static void main(String[] args){
String str="a**b*c**d*";
char[] arr=str.toCharArray();
int i=arr.length-1;
while(arr[i]!='*'){
i--;
}
for(int k=i-1;k>=0;k--){
if(arr[k]!='*'){
arr[i]=arr[k];
arr[k]='*';
i--;
}
}
for(int k=0;k<arr.length;k++){
System.out.print(arr[k]);
}
System.out.println();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息