[编程题] 算法基础-字符移位

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

 


输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.



输出描述:

对于每组数据,输出移位后的字符串。


输入例子:
AkleBiCeilD

 

输出例子:
kleieilABCD

思想:用2个指针,一个j标记大写字母位置,一个i从后往前大写字符出现的位置,移动i到j中间的小写字母,注意边界,循环停止条件
 1 package fromniuke;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Test29 {
 6 
 7     public static void main(String[] args) {
 8 
 9         Scanner in = new Scanner(System.in);
10         while(in.hasNext()){
11             char[] ch = in.nextLine().toCharArray();
12             char temp;
13             int i = ch.length-1,j = ch.length-1;
14             while(i>=0&&j>=0){
15                 while(i>=0&&Character.isLowerCase(ch[i])) i--; //从后往前,找到大写字母
16                 if(i<0)
17                     break;
18                 temp = ch[i];
19                 for (int k = i+1; k <= j; k++) {
20                     ch[k-1] = ch[k];
21                 }
22                 ch[j] = temp;
23                 j--;
24                 i--;
25             }
26             System.out.println(ch);
27         }
28     }
29 
30 }
31 //AkleBiCeilD

 

posted @ 2016-10-17 17:32  虫儿ls  Views(210)  Comments(0Edit  收藏  举报