atcoder 辞書順

ABC007 B - 辞書式順序

ABC007 B - 辞書式順序
Feb. 2, 2020, 1:52 p.m.

目次

問題

https://atcoder.jp/contests/abc007/tasks/abc007_2

文字列$S$が1つ与えられて辞書順で$S$よりも小さい文字列のうち1つどれでも良いので答える問題です.

辞書順とは、文字列の文字を先頭から1つずつ比べていって初めて異なっていた文字がa - zで早い方を「小さい」とする順序です.
先頭からすべての文字が同じでどちらかの文字列が終端に達した場合先に終端に達した短い方の文字列を「小さい」とします.

入力

S
  • S - 小文字英数字からなる長さ1以上11以下の文字列

出力

T

入出力例

xyz
xy

解説

問題をよく考えてみると実は答えは2パターンしかないことが分かります.
入力がaだった場合、それより小さい文字列は無いので-1が答えです.
それ以外の場合aが答えです.

辞書順で小さいもののうちどれでも良いので1つ答えれば良いので、辞書順最小のaを答えておけば安心というわけです.

計算量

$$O(1)$$

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
string S;

void input() {
  cin >> S;
}

void solve() {
  if (S.length() == 1 && S[0] == 'a') {
    cout << -1 << endl;
    return;
  }

  cout << 'a' << endl;
}

int main() {
  input();
  solve();
  return 0;
}