400点問題だからと言って実装が必ず大変ってわけでもない。
def solve(s): for i, j in zip(range(0, len(s) - 1), range(1, len(s))): if s[i] == s[j]: return "%d %d" % (i + 1, j + 1) for i, j in zip(range(0, len(s) - 2), range(2, len(s))): if s[i] == s[j]: return "%d %d" % (i + 1, j + 1) return "%d %d" % (-1, -1) assert (solve("ee") == "1 2") assert (solve("eeded") == "1 2") assert (solve("abcdd") == "4 5") assert (solve("needed") == "2 3") assert (solve("atcoder") == "-1 -1") assert (solve("abaca") == "1 3") assert (solve("cbaca") == "3 5") assert (solve("abc" * 5000) == "-1 -1") if __name__ == "__main__": print(solve(input()))
総当たりすればいけるのはすぐわかったのでまぁそれはよくて、 初めはしゃくとり法を考え付いたが、理解が浅くて使い方がままならず。
教訓
- 分解してみると小さい問題だけで完結することがある。
- 文字列のテストはやはり最初と最後まできちんと見れてるか。Indexの操作がたまに危うい。
- 2文字の範囲、3文字の範囲のpythonのzip,rangeは頻出。考えずに打てるぐらいまで覚えたい。