蓝桥杯-稍大的字符串
来源:互联网 发布:综合评价算法 编辑:程序博客网 时间:2024/04/29 08:49
题目
标题:稍大的串
串可以按照字典序进行比较。例如:
abcd 小于 abdc如果给定一个串,打乱组成它的字母,重新排列,可以得到许多不同的串,在这些不同的串中,有一个串刚好给定的串稍微大一些。科学地说:它是大于已知串的所有串中最小的串。你的任务就是求出这个“稍大的串”。
例如:
输入串:
abfxy
程序应该输出:
abfyx再例如:
输入串:
ayyyxxff
程序应该输出:
fafxxyyy数据规模约定:
输入的串不超过1000个字符。特例:
如果已知的串已经是所有重组串中最大的,则原样输出读入的那个串。思路
假定输入字符串长度为L,我们倒序遍历字符串,直到第一次找到一个位置x[i] < x[i+1],记子串[0,i]为新串S1,然后反转子串[i+1,L]得到一个新串S2,接着将下x[i]插入到S2的第2个位置。最后拼接字符串S1和S2。
代码
Java版本
import java.util.Scanner;public class BiggerString { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); int i = 0; int len = s.length(); for(i=len-1;i>0;i--) { if(s.charAt(i)>s.charAt(i-1)) break; } if(i==0) { System.out.println(s); } else { //取出最后的降序部分,反转 StringBuilder sb = new StringBuilder(s.substring(i, len)); sb = sb.reverse(); //插入目标字符 sb.insert(1, s.charAt(i-1)); //插入在目标字符之前的字符串 sb.insert(0, s.substring(0, i-1)); System.out.println(sb.toString()); } }}
Python版本
#稍大的串s = raw_input()i = len(s)-1while i>0: if(s[i]>s[i-1]): break i -= 1#i-1if i!=0: l = list(s) l = l[:i-1] + l[:i-1:-1] l.insert(i,s[i-1]) s = ''.join(l)print s
- 结果
azyxtsrrastxyz
0 0
- 蓝桥杯-稍大的字符串
- 【大数据】大数据字符串的加减乘除
- PHP常用字符串的大集合
- 【忙啊忙】- 两个字符串的大整数求和
- Java字符串的10大热点问题盘点
- Java字符串的10大热点问题盘点
- Java字符串的10大热点问题
- Java字符串的10大热点问题盘点
- Java字符串的10大热点问题盘点
- Java字符串的10大热点问题盘点
- 大数据处理时的字符串处理
- Java字符串的10大热点问题盘点
- Java字符串的10大热点问题盘点
- Java字符串的10大热点问题盘点
- 一个字符串引起的大bug
- Java字符串的10大热点问题盘点
- Java字符串的10大热点问题汇总!
- 替换字符串中美元大括号的字符串
- Mysql数据库之主从分离
- Linux 内核时钟架构之时钟事件设备和tick_device绑定
- Linux下的粘滞位
- The builder launch configuration could not be found.项目启动报错
- oralce计算时间差
- 蓝桥杯-稍大的字符串
- 有什么找工作的网站
- PCIe学习笔记(15)--- TLP的ROUTING方式
- iOS开发之Core Animation动画
- 什么是数据结构-数据结构学习笔记1.1(基本概念)
- ScrollView中嵌套RecyclerView问题
- javascript 动态改变onclick事件触发函数代码
- JPA的@Embedded
- 聚类(下)