ことさら−古都プログラマーの更級日記

京都でお寺を回りながら御朱印集めをしていたエンジニアのブログ。おもに技術的なはなしとか日常的なはなし。たまにカメラの話や競馬の話も書きます。

AOJ 2369: CatChecker

問題

ソースコード

  • これはソースを見てもらったほうが圧倒的に早いと思うので。
  • わかりやすく再帰で解くと一瞬で終わります。
class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] c = br.readLine().toCharArray();
        int len = c.length;
        
        // 最終的に返ってきたポインタが c の長さだったら
        if(len == check(c, len, 0)) {
            System.out.println("Cat");
        } else {
            System.out.println("Rabbit");
        }
    }
    
    static int check(char[] c, int len, int pointer) {
        // 最初は必ずm
        if(c[pointer] != 'm') return -1;
        pointer++;
        
        // 次がeでない場合はそこから再帰的に
        if(c[pointer] != 'e') {
            pointer = check(c, len, pointer);
            if(pointer == -1) return -1;
        }
        pointer++;
        
        // 次がwでない場合はそこから再帰的に
        if(c[pointer] != 'w') {
            pointer = check(c, len, pointer);
            if(pointer == -1) return -1;
        }
        pointer++;
        
        // mew文字列が終わる位置を返す
        return pointer;
    }
}