小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
你能帮帮小Q吗?
你能帮帮小Q吗?
输入描述:
输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.
输出描述:
对于每组数据,输出移位后的字符串。
输入例子1:
AkleBiCeilD
输出例子1:
kleieilABCD
这道题最主要的是不能申请额外的空间,由于是把大写字母放在后面,所以重后面开始扫描,初始大写字母存放在末尾lastUp-1,找到一个大小字母,就在找到的这个位置的后面的字符向前移动一位,在把找到的大写字母放到初始位置lastUp-1.然后改变初始位置lastUp-- .
private static String characterMove(String str) { int len = str.length(); char[] chars = str.toCharArray(); if (len <1||len>1000) { System.out.println("参数错误,请输入1-1000长度之内的字符串"); return "error"; } //从后面开始排序 int lastUp = len-1; for (int i = lastUp; i >=0; i--) { if (Character.isUpperCase(chars[i])) { char temp = chars[i]; for (int j = i; j < lastUp; j++) { chars[j] = chars[j+1]; } chars[lastUp] = temp; lastUp--; } } return String.valueOf(chars); }
测试程序:
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入字符串-"); String s = scanner.nextLine(); System.out.println(characterMove(s)); }
测试结果:
请输入字符串-
JHjhGhjHJhHK
jhhjhJHGHJHK
Process finished with exit code 0