字符的左右移動-java

題目:

字符串移動(字符串爲’*’號和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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章