問題概要

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

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

制約

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

考察

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

2 文字の場合は,

  • aaやppといったAA 型

以上, 1 通りのみ.

3 文字の場合は,

  • dadやmomといったABA 型
  • zooやseeといったABB 型
  • ddrやmmoといったAAB 型
  • aaaやzzzといったAAA 型

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

4 文字の場合は,

  • aaaaやzzzzといったAAAA 型
  • aaazやzzzaといったAAAB 型
  • aazaやzzazといったAABA 型
  • azaaやzazzといったABAA 型
  • zaaaやazzzといった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)