**

算法训练 字符串的展开

**

题目:

在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“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. Qt 视频播放器

    #include <phonon/VideoPlayer> #include <phonon/SeekSlider> #include <phonon/MediaObje ...

  2. QtCreator MSVC 搭建 Debugger

    QtCreatorForWindows搭建Debugger QtCreator for windows选择mingw或者msvc: qt-opensource-windows-x86-msvc2015 ...

  3. [zoj3623]背包模型

    给定n种物品,每种物品需要ti时间生产出来,生产出来以后,每单位时间可以创造wi个价值.如果需要创造至少W个价值,求最少时间. 思路:dp[j]表示用时间j所能创造的最大价值,则有转移方程:dp[j ...

  4. SEO策略之关键词选择的原则

    策略就是指为了实现某一个目标而预先制定的能够实施的方案.在制定SEO策略的时候,我们需要了解网站所有的基本情况,同时又要对网站所处的行业的竞争对手有一个准确的数据分析.SEO策略有几个比较突出的属性: ...

  5. java项目部署Linux服务器几种启动方式总结经验

    一:两种部署包: 部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是ja ...

  6. 使用JDBC操作MySQL

    使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...

  7. JVM 调优测试 之 故意分配小的堆空间,观察gc回收打印的内容

    测试代码如下: @Test public void testPrintGcDetail(){ HashMap<String, List> gcMap = new HashMap<&g ...

  8. SQLServer用with temptb AS临时表查询或者更新字段,将某个字段赋值成某个字段的值

    with temptb AS(SELECT sl.CompanyID,info.BID FROM dbo.TableXXXXX   slLEFT JOIN dbo.Tableinfo  infoON ...

  9. 力扣题解-LCP 06. 拿硬币

    题目描述 桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中.我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数. 示例 1: 输入:[4,2,1] 输出:4 解释: ...

  10. django 两种创建模型实例的方法

    1. 添加一个classmethod from django.db import models class Book(models.Model): title = models.CharField(m ...