问题
小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。你能帮帮小Q吗?
输入描述
输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.
输出描述
对于每组数据,输出移位后的字符串。
Java Code
import java.util.Scanner;
public class StringShift {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNext()) {
String s = scan.nextLine();
char[] str = s.toCharArray();
//i指针直接跳过字符串末尾连续的若干大写字母
int i = str.length - 1;
while(str[i] > 64 && str[i] < 97)
i--;
//冒泡排序
for(; i >= 1; --i) {
boolean flag = true;
for(int j = 1; j <= i; ++j) {
if(str[j-1] > 64 && str[j-1] < 97) {
//如果第j-1个字符为大写字母且第j个字符为非大写字母,则交换之
if(str[j] < 65 || str[j] > 96) {
swap(str, j-1, j);
flag = false;
}
}
}
//如果某一轮冒泡没有任何元素发生变化,则提前结束冒泡
if(flag) break;
}
System.out.println(new String(str));
}
scan.close();
}
private static void swap(char[] str, int i, int j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}