华为在线编程系列-字符串排序
来源:互联网 发布:js 大小改变事件 编辑:程序博客网 时间:2024/05/21 12:54
题目:
题目描述:
输入一串字符串,按照以下要求对字符串进行调整,输出调整后的字符串
要求:规则1:英文字母从A到Z排列,不区分大小写。 如,输入:Type 输出:epTy规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。 如,输入:BabA 输出:aABb规则3:非英文字母的其它字符保持原来的位置。如,输入:By?e 输出:Be?y
例子:
输入:A Famous Saying: Much Ado About Nothing (2012/8).输出:A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
思路:一开始我想要用类似题目调整字符串小写在前大写在后的做法(利用指针来记录需要移动的个数)
- 仔细看了规则之后发现那样做很复杂,于是参考了讨论区的思想:先将所有是字母的元素按照从a-z的排列放进队列,保持元素相对位置不变,然后对字符串进行调整时,将元素为字母的都改成队列里的元素,遍历字符串和队列就可以得到一个按照规则排好序的字符串
代码:
import java.util.*;public class Main{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); while (scan.hasNext()){ String str = scan.nextLine(); Deque<Character> queue = new LinkedList<>(); for(int i = 0; i < 26; i++){ for(int j = 0; j < str.length(); j++){ char ch = str.charAt(j); //如果是字母就入栈 if(ch - 'a' == i || ch - 'A' == i){ queue.offer(ch); } } } StringBuilder result = new StringBuilder(""); int size = queue.size(); for(int i = 0, j = 0; i < str.length(); i++){ char temp = str.charAt(i); if((temp <= 'z' && temp >= 'a') || (temp <= 'Z' && temp >= 'A')){ result.append(queue.poll()); }else{ result.append(temp); } } System.out.println(result.toString()); } }}
0 0
- 华为在线编程系列-字符串排序
- 华为在线编程系列-字符串分割
- 华为在线编程系列-字符串加密解密
- 华为在线编程系列-最小公倍数
- 华为在线编程系列-坐标移动
- 华为在线编程系列-密码合格验证
- 华为在线编程系列-进制转换
- 华为在线编程系列-简单密码
- 华为在线编程系列-数据分类处理
- 华为在线编程系列-质数因子
- 华为在线编程系列-明明的随机数
- 华为在线编程系列-删除字符串中出现次数最少的字符
- 华为在线测试题[基础篇]--字符串排序
- 华为机试在线训练-牛客网(16)字符串排序
- 华为在线编程系列-提取不重复的整数
- 华为在线编程系列-合唱队(动态规划的应用)
- 牛客网-华为在线编程004--C++字符串的分割
- 字符串排序 Java编程练习 学堂在线
- python笔记2
- 练习
- linux_run jar
- linux_ubuntu查看系统资源占用(内存,cpu和进程)
- linux_Ubuntu反复进入登录界面
- 华为在线编程系列-字符串排序
- linux_ubuntu各种环境变量配置的区别
- Hibernate,Struts, Spring, SpringMvc,MyBatis的优点
- 淘宝爬虫
- ubuntu_解压命令全览
- Linux_通过ndiswrapper安装无线网卡驱动
- OpenCV3.2+VS2015配置
- 使用enum、const、inline替换#define的原因
- 最大连续子序列和