**

算法训练 字符串的展开

**

题目:

在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:

  (1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。

  (2) 参数p1:展开方式。p1=1时,对于字母子串,填充小写字母;p1=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号“”来填充。

  (3) 参数p2:填充字符的重复个数。p2=k表示同一个字符要连续填充k个。例如,当p2=3时,子串“d-h”应扩展为“deeefffgggh”。减号两边的字符不变。

  (4) 参数p3:是否改为逆序:p3=1表示维持原来顺序,p3=2表示采用逆序输出,注意这时候仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2时,子串“d-h”应扩展为“dggffeeh”。

  (5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。

输入格式

  输入包括两行:

  第1行为用空格隔开的3个正整数,一次表示参数p1,p2,p3。

  第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。

输出格式

  输出只有一行,为展开后的字符串。

输入输出样例1:

输入

1 2 1

abcs-w1234-9s-4zz

输出

abcsttuuvvw1234556677889s-4zz

输入输出样例2:

输入

2 3 2

a-d-d

输出

aCCCBBBd-d

输入输出样例3

输入

3 4 2

di-jkstra2-6

输出

dijkstra2
***********6

数据规模和约定

  40%的数据满足:字符串长度不超过5

  100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100

分析:

纯粹的耗时的题目,注意题目的要求,注意边界特殊处理如:第一个和最后一个字符,连续的‘-’等。

(小编这里是把各种情况直接放在了一起,是为了更加节省内存)

import java.util.ArrayList;
import java.util.Scanner; public class Main{
public static void main(String[] args) {
ArrayList <String> list = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
int p1 = sc.nextInt();
int p2 = sc.nextInt();
int p3 = sc.nextInt(); String s = sc.next();
String str = "";
char [] shu = s.toCharArray(); for (int i = 0; i < shu.length; i++) {
if(shu[i]=='-'){
if(shu[i-1]>='0' && shu[i+1]<='9' || shu[i-1]>='a' && shu[i+1]<='z') {
for (char j = (char) (shu[i-1]+1); j < shu[i+1]; j++) {
for (int j2 = 0; j2 < p2; j2++) {//p2处理
str+=j;
} }
if(p3==2) {
for (char j = (char) (shu[i+1]-1); j >shu[i-1]; j--) {
for (int j2 = 0; j2 < p2; j2++) {//p2处理
str+=j;
} } } //p1处理
if(p1==2) {
str = str.toUpperCase();
}
if(p1==3) {
int n = str.length();
str="";
for (int j = 0; j < n; j++) {
str+="*";
}
} list.add(str);
str="";
}
}
}
int count = 0;
for (int i = 0; i < shu.length; i++) {
if(shu[i]=='-') {
if(shu[i-1]<'9' && shu[i+1]>'a' || shu[i-1]>'a' && shu[i+1]<'9') {
System.out.print('-'); }
else {
System.out.print(list.get(0));
}
}
else {
System.out.print(shu[i]);
}
count++;
} }}

Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)的更多相关文章

  1. Java实现 蓝桥杯 算法训练 字符串长度(IO无敌)

    试题 算法训练 字符串长度 问题描述 输入一个字符串,输出其长度. 输入格式 输入一个字符串 输出格式 输出字符串长度 样例输入 一个满足题目要求的输入范例. HelloWorld 样例输出 10 数 ...

  2. Java实现 蓝桥杯 算法训练 字符串合并

    试题 算法训练 字符串合并 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输入两个字符串,将其合并为一个字符串后输出. 输入格式 输入两个字符串 输出格式 输出合并后的字符串 样例 ...

  3. Java 蓝桥杯 算法训练(VIP) 最大体积

    最大体积 问题描述 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积. 假如每个物品有无限件可用,那么有些体积是永远也装不出来的. 为了尽量装满背包,附中的OIER想要研究一下 ...

  4. Java蓝桥杯 算法训练 复数归一化

    算法提高 复数归一化 时间限制:1.0s 内存限制:512.0MB 编写函数Normalize,将复数归一化,即若复数为a+bi,归一化结果为a/sqrt(aa+bb) + ib/sqrt(aa+b* ...

  5. 蓝桥杯 算法训练 素因子去重 (java)

    问题描述 给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1   输入格式 一个整数,表示n   输出格式 输出一行,包含一个整数p.   样例输入 1000   ...

  6. Java 蓝桥杯 算法训练 貌似化学

    ** 貌似化学 ** 问题描述 现在有a,b,c三种原料,如果他们按x:y:z混合,就能产生一种神奇的物品d. 当然不一定只产生一份d,但a,b,c的最简比一定是x:y:z 现在给你3种可供选择的物品 ...

  7. 蓝桥杯 算法训练 ALGO-143 字符串变换

    算法训练 字符串变换   时间限制:1.0s   内存限制:256.0MB 问题描述 相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了.今天,徐老师想测试一下大家对于字符串操作的掌 ...

  8. Java实现 蓝桥杯 算法训练 第五次作业:字符串排序

    试题 算法训练 第五次作业:字符串排序 问题描述 输入一个小写字符串,按从小到大的顺序输出. 输入格式 bcaed 输出格式 abcde 顶格输出,中间没有空格 样例输入 一个满足题目要求的输入范例. ...

  9. Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)

    试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...

随机推荐

  1. Vue + Element-ui实现后台管理系统(4)---封装一个ECharts组件的一点思路

    封装一个ECharts组件的一点思路 有关后台管理系统之前写过三遍博客,看这篇之前最好先看下这三篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system ...

  2. matlab 提示 Error using mex No supported compiler or SDK was found 错误的解决办法

    在使用simulink的S-Function去调用C程序的时候,需要使用mex指令预先编译C程序,但是出现 Error using mex No supported compiler or SDK w ...

  3. DP动态规划之01背包问题

    目录 问题描述 问题分析 问题求解 Java代码实现 优化方向一:时间方面:因为是j是整数是跳跃式的,可以选择性的填表. 思考二:处理j(背包容量),w(重量)不为整数的时候,因为j不为整数了,它就没 ...

  4. vue项目中使用bpmn-流程图xml文件中节点属性转json结构

    内容概述 本系列“vue项目中使用bpmn-xxxx”分为七篇,均为自己使用过程中用到的实例,手工原创,目前陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意事项,具 ...

  5. android 防止多次点击,导致事件监听响应到其他界面

    下面有个案例: A点击的时候就跳转到B界面,点击B界面后结束,返回到A界面中 1.此时在B界面中,设置点击事件,点击后结束B v.setOnClickListener(new OnClickListe ...

  6. 一站式Kafka平台解决方案——KafkaCenter

    KafkaCenter是什么 KafkaCenter是一个针对Kafka的一站式,解决方案.用于Kafka集群的维护与管理,生产者和消费者的监控,以及Kafka部分生态组件的使用. 对于Kafka的平 ...

  7. centos7 下安装apache mysql php phpmyadmin。

    1 安装mysql yum -y install mariadb-server systemctl start mariadb.service systemctl enable mariadb.ser ...

  8. Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 图像属性 图像 ...

  9. vue打包时semver.js版本报错

    如图,报错semver.js版本不正确,解决思路是在node_modules/semver.js内,忽略版本检查 ''' // if ANY of the sets match ALL of its ...

  10. 谈谈C#中各种线程的使用及注意项~

    说到线程,很多人会想到timer吧, 接下来我们就来学习一下 timer 吧,摇摇脑袋,清醒一下,接下来开始学习.... 一.基本概念 1.什么是进程?        当一个程序开始运行时,它就是一个 ...