[编程题] 算法基础-字符移位
小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
Jumping from failure to failure with undiminished enthusiasm is the big secret to success.