トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

No.345 最小チワワ問題

■■■問題■■■

Cさんはチワワが大好きです。そこでCさんは、文字列にもチワワを見出すことにしました。
Cさんによれば、ある文字列に 'c', 'w', 'w' がこの順で含まれるとき、
その文字列を「チワワ列」であるといいます。

Cさんは小さなチワワが好きなので、できるだけ長さの小さいチワワ列を見つけたいです。

文字列Sが与えられるので、
その連続した部分文字列のうちチワワ列となるものの最小の長さを求めてください。

■■■入力■■■

S

1行目に文字列 S(1 <= |S| <= 100) が与えられる。
Sは小文字のアルファベットのみで構成される。 

■■■出力■■■

Sの連続した部分文字列のうちチワワ列となるものの最小の長さを整数で出力してください。
もしSにチワワ列が含まれない場合は-1を出力してください。
最後に改行してください。


C#のソース

using System;
using System.Collections.Generic;

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("ilovechiwawa");
            //6
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("wachiwachi");
            //-1
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("chiwaaaaaaamikawayadeeeeesu");
            //16
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        string S = InputList[0];

        bool FoundAnswer = false;
        int MinLength = int.MaxValue;
        for (int I = 0; I <= S.Length - 1; I++) {
            if (S[I] != 'c') continue;
            for (int J = I + 1; J <= S.Length - 1; J++) {
                if (S[J] != 'w') continue;
                for (int K = J + 1; K <= S.Length - 1; K++) {
                    if (S[K] != 'w') continue;
                    FoundAnswer = true;
                    if (K - I + 1 < MinLength) {
                        MinLength = K - I + 1;
                        break;
                    }
                }
            }
        }
        Console.WriteLine(FoundAnswer ? MinLength : -1);
    }
}


解説

ナイーブに解いてます。