腾讯编程题目

小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗?

import java.util.Scanner;
/**
 * 思想就是通过i,j两个游标,通过i记录字符串最后一个是小写字母的位置,
 * 而j是往前寻找大写字母。当j找到大写字母的时候,就用临时变量记录下来
 * j指向的大写字母,之后往迁移动,之后在付给i指向的位置,之后i向前移
 * 动一位。
 * 对于字符串的末尾为大写的情况,直接让i往前移动一位即可
 * 
 * 
 * */

public class Main{
    public static void main(String[] Args){
    Scanner scanner = new Scanner(System.in);
    
    while(scanner.hasNextLine()){
        String str = scanner.nextLine();
        char[] charStr=str.toCharArray();
        check(charStr);
        
    }
   }
    
    public static void check(char[] charStr){
        char temp;
        
        int i=charStr.length-1;
        if(charStr[i]<'a'){         
            --i;    
        }
        for(int j=charStr.length-1;j>=0;--j){
            if((charStr[j]<'a')&&(j!=charStr.length-1)){
                temp=charStr[j];
                for(int m=j;m<i;++m){
                    charStr[m]=charStr[m+1];
                }
                charStr[i]=temp;
                --i;
            }
        }
       for(char ch:charStr)
           System.out.print(ch);
        System.out.println();
    }
}

/*public class Main{
    public static void main(String[] Args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String str = sc.nextLine();
            for(int i=0;i<str.length();++i){
                if(str.charAt(i)>='a')
                    System.out.print(str.charAt(i));
            }
            for(int i=0;i<str.length();++i){
                if(str.charAt(i)<='Z')
                    System.out.print(str.charAt(i));
            }
        }
    }
}*/
  

 

小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
你能帮帮小Q吗?

 

posted @ 2017-03-22 12:51  mslog  阅读(245)  评论(0编辑  收藏  举报