洛谷链接&Atcoder 链接

本篇题解为此题较简单做法较少码量,并且码风优良,请放心阅读。

题目简述

给定字符串 \(S\) , 仅包含互不相同的小写字母, 你需要找到仅包含互不相同的小写字母的字符串中,第一个字典序比它大的字符串, 如果找不到输出 \(-1\)。(\(| S | \le 26\))

思路

这篇题解主要分享一下 map 的做法。

可分两种情况讨论:

  1. 字符串长度 \(< 26\)。

  2. 字符串长度 \(= 26\)。

因为互不相同所以不会出现大于 \(26\) 的情况。

对于样例 \(4\):abcdefghijklmnopqrstuvwzyx

可将 w 变为它后面比它大但最小x,后面直接舍去即可,变为 abcdefghijklmnopqrstuvx

解释完样例,先来讨论一下情况 \(1\),因为长度小于 \(26\),所以至少有 \(1\) 个字母未出现过,直接在字符串末尾加上没出现过最小字母即可。

对于情况 \(2\),就可参考以上样例 \(4\) 的解释,可发现找到一个位置,把这个位置上的字母替换为它后面比它大但最小的字母即可,这个位置需要从后向前枚举

那么接下来就是实现了,首先需要定义一个 map 容器,来存储哪些字母出现过或没出现过,对于情况 \(1\) 直接模拟即可。

对于情况 \(2\) 则需记录一个最大值,如果当前位置小于最大值再枚举,这样就避免了不合法的情况了。

经过以上分类讨论,很容易即可写出代码了:

#include<iostream>
#include<map>
using namespace std; string str;
int maxn;
map<char, int> mp;
map<int, bool> vis; int max(int x, int y) { return (x > y) ? x : y; } int main() {
cin >> str;
int n = str.length(); // 记录长度
for(int i = 0; i < n; i ++) mp[str[i]] ++; // 计数
if(n < 26) {
for(int i = 'a'; i <= 'z'; i ++)
if(!mp[i]) {
cout << str << char(i) << endl; // 没有出现过,直接输出结束
return 0;
}
}
// 从后向前枚举
for(int i = n - 1; i >= 0; i --) {
// 满足条件,可输出
if(str[i] < maxn) {
for(int j = 0; j < i; j ++) cout << str[j];
for(int j = str[i] - 'a'; j < 26; j ++)
if(vis[j]) {
cout << char(j + 'a'); // 输出替换的字母
return 0;
}
}
maxn = max(maxn, str[i]);
vis[str[i] - 'a'] = true;
}
cout << "-1\n"; // 以上条件都不满足,输出 -1
return 0;
}

提交记录

\[\text{The End!}
\]

AT_agc022_a 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. Redis内存容量评估

    业务侧申请redis服务器资源时,需要事先对redis容量做一个大致评估,之前的容量评估公式基本只是简单的 (key长度 value长度)* key个数,误差较大,后期经常需要进行缩扩容调整,因此提出 ...

  2. PHP 网络通信底层原理分析

    一.引言 我们日常的程序开发大多数都是以业务为主,很少会接触到底层逻辑.对于我们程序员来说,了解程序的底层运行逻辑,更有助于提升我们对程序的理解.我相信大多数的人,每天基本上都是完成业务需求.当然,完 ...

  3. itest(爱测试)开源接口测试&敏捷测试&极简项目管理 8.0.0 发布,测试重大升级

    (一)itest 简介及更新说明 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析.可按测试包 ...

  4. Java中File类和I/O

    目录 File 类 File 构造方法 输入输出(I/O) 字节流与字符流 输入流与输出流 输入输出字节流 构造方法 方法 InputStream 基本方法 public int read() thr ...

  5. JavaSE的运算符

    [Top] 算术运算 分类 运算符 算数运算符 * / + - % ++ -- 赋值运算符 +=, -=, /=, *=, %=(扩展赋值运算符), = 比较(关系)运算符 == != > &l ...

  6. kettle从入门到精通 第十二课 kettle java代码过滤记录、利用Janino计算Java表达式

    1.下图通过简单的示例讲解了根据java代码过滤记录和利用Janino计算Java表达式两个组件. 2.根据java代码过滤记录 1)步骤名称:自定义 2)接收匹配的行的步骤(可选):下面条件(jav ...

  7. INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能

    近年来,日志管理平台越来越流行.使用日志管理平台可以实时地.统一地.方便地管理和查看日志,挖掘日志数据价值,驱动运维.运营,提升服务管理效率. 方案架构 Beats 是轻量级采集器,包括 Filebe ...

  8. html 适配iphone X 底部导航

    html 适配iphone X 底部导航 适配手机底部有横线的手机,以免被横线遮挡 padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iO ...

  9. ElasticSearch多语义命令在query和aggregation中的区别

    初学ES时,有两个较为特殊的命令让我困惑 terms 在query中使用terms,代表匹配多个查询条件 在aggregation中使用terms,代表按指定filed进行groud by分组聚合 f ...

  10. java的ConCurrentHashMap

    一般的应用的编程,用到ConCurrentHashMap的机会很少,就象大家调侃的一样:只有面试的时候才用得着. 但还是有. 网上关于这个的资料,多如牛毛,大部分是原理分析和简单例子. 原理的核心就一 ...