Java sdut acm 1916 字符串扩展
2017-04-14 17:43
495 查看
题目链接:点击打开链接
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Tom有些时候为了记录的方便,常常将一些连续的字符用扩展符'-'简单表示。比如abcdefg可以简写为a-g,即用起始的字符和终止字符中间加上一个扩展符'-'来表示这个字符串。但是为了处理的方便,Tom又必须将这些我们简单记法扩展成原来的字符串。很明显要是人工来做的话必定很麻烦,Tom知道计算机可以帮助他完成这个任务,但是他却不会编程,这的确让他很上火。他知道今天是山东理工大学第三届ACM校赛的日子,届时来自全校的编程爱好者都会来参加比赛,他很兴奋,因为这个困惑他良久的问题终于要被解决了。给你一个含有扩展符'-'的字符串,你的任务就是将他还原成原来的字符串。要求是只处理[a-z]、[A-Z]、[0-9]范围内的字符扩展,即只有当扩展符前后的字符同时是小写字母、大写字母或数字时并且扩展符前面的字符不大于后面的字符才进行扩展,其它情况不进行扩展,原样输出。例如:a-R、D-e、0-b、4-B等字符串都不进行扩展。
第一行是一个正整数T,表示共有T组测试数据(T < 100)。下面的T行,每一行包括一个长度不大于1000的待扩展字符串.
每组测试数据输出一行扩展后的字符串。
山东理工大学第三届ACM程序设计竞赛
代码实现:
import java.util.Date;
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
while(n-- != 0){
String str = input.next();
String newStr = expand(str);
System.out.println(newStr);
}
}
public static String expand(String oldStr){
//目标字符串缓冲区,便于修改
StringBuffer buffer = new StringBuffer();
//将原字符串转换为字符数组
char[] charArray = oldStr.toCharArray();
//对原串中每个字符进行分析
for(int i = 0;i < charArray.length;i++){
//加入当前字符
buffer.append(charArray[i]);
//如果该字符为'-',且既不是第一个又不是最后一个字符,
//判断其前后字符是否符合扩展条件
if(charArray[i] == '-'&& i > 0&& i < charArray.length-1){
//‘-’出现在非首非尾处才可以扩展
char beforeChar = charArray[i-1];
char nextChar = charArray[i+1];
if((beforeChar <= nextChar) && (
(beforeChar >= 'a' && nextChar <= 'z')||
(beforeChar >= 'A' && nextChar <= 'Z')||
(beforeChar >= '0' && nextChar <='9'))){
//去掉当前的‘-’字符
buffer.deleteCharAt(buffer.length()-1);
//链接上中间的字符
for(int ch = beforeChar+1;ch <= nextChar-1;ch++){
buffer.append((char)ch);
}
}
}
}
return buffer.toString();
}
}
字符串扩展
Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic
Problem Description
Tom有些时候为了记录的方便,常常将一些连续的字符用扩展符'-'简单表示。比如abcdefg可以简写为a-g,即用起始的字符和终止字符中间加上一个扩展符'-'来表示这个字符串。但是为了处理的方便,Tom又必须将这些我们简单记法扩展成原来的字符串。很明显要是人工来做的话必定很麻烦,Tom知道计算机可以帮助他完成这个任务,但是他却不会编程,这的确让他很上火。他知道今天是山东理工大学第三届ACM校赛的日子,届时来自全校的编程爱好者都会来参加比赛,他很兴奋,因为这个困惑他良久的问题终于要被解决了。给你一个含有扩展符'-'的字符串,你的任务就是将他还原成原来的字符串。要求是只处理[a-z]、[A-Z]、[0-9]范围内的字符扩展,即只有当扩展符前后的字符同时是小写字母、大写字母或数字时并且扩展符前面的字符不大于后面的字符才进行扩展,其它情况不进行扩展,原样输出。例如:a-R、D-e、0-b、4-B等字符串都不进行扩展。
Input
第一行是一个正整数T,表示共有T组测试数据(T < 100)。下面的T行,每一行包括一个长度不大于1000的待扩展字符串.
Output
每组测试数据输出一行扩展后的字符串。
Example Input
3 ADEa-g-m02 acm-0-5-a-ac-cm-m-A-AC-CM-M Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-Z
Example Output
ADEabcdefghijklm02 acm-012345-aaccmm-AACCMM Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-Z
Hint
Author
山东理工大学第三届ACM程序设计竞赛代码实现:
import java.util.Date;
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
while(n-- != 0){
String str = input.next();
String newStr = expand(str);
System.out.println(newStr);
}
}
public static String expand(String oldStr){
//目标字符串缓冲区,便于修改
StringBuffer buffer = new StringBuffer();
//将原字符串转换为字符数组
char[] charArray = oldStr.toCharArray();
//对原串中每个字符进行分析
for(int i = 0;i < charArray.length;i++){
//加入当前字符
buffer.append(charArray[i]);
//如果该字符为'-',且既不是第一个又不是最后一个字符,
//判断其前后字符是否符合扩展条件
if(charArray[i] == '-'&& i > 0&& i < charArray.length-1){
//‘-’出现在非首非尾处才可以扩展
char beforeChar = charArray[i-1];
char nextChar = charArray[i+1];
if((beforeChar <= nextChar) && (
(beforeChar >= 'a' && nextChar <= 'z')||
(beforeChar >= 'A' && nextChar <= 'Z')||
(beforeChar >= '0' && nextChar <='9'))){
//去掉当前的‘-’字符
buffer.deleteCharAt(buffer.length()-1);
//链接上中间的字符
for(int ch = beforeChar+1;ch <= nextChar-1;ch++){
buffer.append((char)ch);
}
}
}
}
return buffer.toString();
}
}
相关文章推荐
- SDUT-ACM 1916 字符串扩展
- sdut1916 字符串扩展
- sdut_java_字符串扩展
- Java sdut acm 2714 下沉的船(字符串、链表)
- 字符串扩展 SDUT 1916
- java 1916 字符串扩展
- 【replace的用法】第三届ACM/ICPC程序设计知识竞赛网络赛—— 字符串扩展
- Java sdut acm 1131 CC++训练1---最大公约数与最小公倍数
- 时间日期格式转换(Java)acm.sdut
- Java sdut acm 2618 手机键盘
- 多项式求和(Java)acm.sdut
- 2-2 Time类的定义(Java)acm.sdut
- Java sdut acm 2271 Eddy的难题
- 计算长方体、四棱锥的表面积和体积(Java)acm.sdut
- 分数四则运算(Java)acm.sdut
- Java sdut acm 3349 答答租车系统(面向对象综合练习)
- sdut 第三届ACM/ICPC程序设计知识竞赛网络赛 字符串拓展
- java---正则表达式的字符串简单实用及扩展链接
- Java sdut acm 1140 面向对象程序设计上机练习一(函数重载)
- 回文时间(Java)acm.sdut