2017年10月18日水曜日

同じ文字列かどうかを判定する

問題:2つの文字列があり、片方の文字列がもう片方を並べ替えたものになっているかどうかを判定するプログラムを書け


2つの文字列が同じ文字と文字数が使われていること(順列の性質)を利用します。

文字コード分の配列を整数型で確保して、片方の文字数を加算、
もう片方の文字列を減産し、各々の文字数が不一致ならば、違う文字列だと判断することができますね。

コードを見ていきましょう

kotlin

fun isPermutation(str1 : String,str2 : String) : Boolean {
    // 長さが違えば異なる文字列
    if(str1.length != str2.length){
        return false
    }
    // ascii仮定
    var letters = IntArray(128)
    for(char in str1){
        // 対応する文字コード数のindexを加算する
        letters[char.toInt()]++
    }

    // 一致チェック
    for(char in str2){
        letters[char.toInt()]--
        // ある文字数が多い場合一致しないことになる
        if(letters[char.toInt()] < 0){
            return false

        }
    }
    return true
}

文字コードをasciiと解釈しています

0 件のコメント:

コメントを投稿