問題概要

文字列$s$の中に, 過半数が同じ文字となる 2 文字以上の部分文字列$t$(アンバランスな部分文字列)は存在するか判定せよ.

$t$が存在するならその区間を, しないなら-1 -1を出力せよ.

制約

  • $2 \leq |s| \leq 10^5$
  • $s$は小文字のアルファベットのみからなる.

考察

$t$は 2 文字以上なので, とりあえず順番にどんな文字列がアンバランスなのか考えてみる.

2 文字の場合は,

  • aappといったAA 型

以上, 1 通りのみ.

3 文字の場合は,

  • dadmomといったABA 型
  • zooseeといったABB 型
  • ddrmmoといったAAB 型
  • aaazzzといったAAA 型

以上, 4 通りだが, 内 ABB 型, AAB 型, AAA 型は AA 型を含んでいるため, 実際はABA 型のみを考えればよさそう.

4 文字の場合は,

  • aaaazzzzといったAAAA 型
  • aaazzzzaといったAAAB 型
  • aazazzazといったAABA 型
  • azaazazzといったABAA 型
  • zaaaazzzといったBAAA 型

以上, 5 通りだが, 全て AA 型を含んでいるため考えなくてよさそう.

同様に 5 文字以降も考えていくと, AA 型ABA 型を含んでいそうなので, この 2 通りを判別する.

提出コード(Python3🐍)

s = input()
for i in range(len(s) - 1):
    if s[i] == s[i + 1]:
        print(i + 1, i + 2)
        exit()
for i in range(len(s) - 2):
    if s[i] == s[i + 2]:
        print(i + 1, i + 3)
        exit()
print(-1, -1)