您的位置:首页 > 编程语言

腾讯2017暑期实习生编程题-字符移位

2017-03-24 15:33 204 查看
题目:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间

例如输入 “AkleBiCeilD”;输出结果为 “kleieilABCD”

思路:定义两个计数器count和countSmall(一个统计当前字母之前的大写字母个数,另一个统计前面“大写”子串的后面小写子串字符个数)遍历字符串,当这个字符串为“大写”时,count++;遇到小写字符,则指针往后移,countSmall++;然后前面所以大写字母往后移动 (文字描述起来太费劲了,还是画个图比较明白哈哈哈哈)

代码:

import java.util.Scanner;
public class MoveChar {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
int len = str.length();
char[] c = str.toCharArray();
int count = 0;//计算大写字母的个数
int countSmall = 0;//计算小写字母的个数
for(int i = 0; i < len; i++){
int temp = 0;
//查找大写字母个数
while(i < len && c[i] <= 'Z' && c[i] >= 'A'){
temp = i;
count++;
i++;
}
//将大写字母截取存为一个临时变量
String tempStr = new String(c).substring(temp-count+1, temp+1);
if(count > 0){
//查找小写字母个数,并且往前移动到合适的位置
while(i < len && c[i] <= 'z' && c[i] >= 'a'){
countSmall++;
c[i-count] = c[i];
i++;
}
//将tempStr存储的临时子串放到合适的位置
for(int j = 0; j < count; j++){
c[temp+countSmall] = tempStr.charAt(count-j-1);
temp--;
}
i--;//此处一定记得i需要减1
//每一轮交换完位置,需要将小写字母计算器赋值为0;
countSmall = 0;
}
}
System.out.print(c);
}
}


关于在牛客上跑这个代码的槽点:

我在自己的IDE运行测试用例,输出结果跟期望结果一样;但是在牛客上运行,居然不输出!!!!!!

“我能怎么办,我也很无奈啊”

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: