はまやんはまやんはまやん

hamayanhamayan's blog

ケース・センシティブ [第三回 アルゴリズム実技検定 A]

https://atcoder.jp/contests/past202005-open/tasks/past202005_a

解説

https://atcoder.jp/contests/past202005-open/submissions/14065972

PASTではややおなじみである気がするが、ABCのA問題級が最初に来ることはあまりない。
ちょっとばかりのややこしさがある問題が出てくる。

FizzBuzz問題のように判定順番が重要になる。
まず最初に完全一致するかを判定しよう。
他を先に判定しまうと誤判定する恐れがある。

完全一致しない場合は、大小を無視した一致か不一致なので、文字列の大小を考えない状態にしたい。
これは各言語でどうやるかは分かれる所。
pythonなら一瞬だったと思うが、C++の場合はtransformを使うのがオススメ。
transform(all(s), s.begin(), [](char c) {return tolower(c); });
のように書くのだが、このように書くと、各文字に対してtolower関数を適用してくれるので、
文字列をすべて小文字に標準化することができる。
この状態でsとtを比較して同じなら、大小を無視した一致となる。

そうでもないなら、不一致。

string s, t;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> s >> t;

    if (s == t) {
        cout << "same" << endl;
        return;
    }

    transform(all(s), s.begin(), [](char c) {return tolower(c); });
    transform(all(t), t.begin(), [](char c) {return tolower(c); });

    if (s == t) cout << "case-insensitive" << endl;
    else cout << "different" << endl;
}