1. 程式人生 > 實用技巧 >leetcode刷題筆記 二百零五題 同構字串

leetcode刷題筆記 二百零五題 同構字串

leetcode刷題筆記 二百零五題 同構字串

源地址:205. 同構字串

問題描述:

給定兩個字串 s 和 t,判斷它們是否是同構的。

如果 s 中的字元可以被替換得到 t ,那麼這兩個字串是同構的。

所有出現的字元都必須用另一個字元替換,同時保留字元的順序。兩個字元不能對映到同一個字元上,但字元可以對映自己本身。

示例 1:

輸入: s = "egg", t = "add"
輸出: true
示例 2:

輸入: s = "foo", t = "bar"
輸出: false
示例 3:

輸入: s = "paper", t = "title"
輸出: true
說明:
你可以假設 s 和 t 具有相同的長度。

//由於s和t同構,故對應位置的字元位置一致,使用map記錄當前字元的位置
//若此時對應字元位置不相同,則返回false
import scala.collection.mutable
object Solution {
    def isIsomorphic(s: String, t: String): Boolean = {
        val length = s.length
        var mapS = new mutable.HashMap[Char, Int]()
        var mapT = new mutable.HashMap[Char, Int]()
        
        for(i <- 0 to length-1){
            val charS = s.charAt(i)
            val charT = t.charAt(i)
            
            //當前字元已經插入map, 比較其位次是否一致
            if(mapS.contains(charS) && mapT.contains(charT)){
                //位次不相等,返回false
                if (mapS(charS) != mapT(charT)) return false
                //相同,更新之前位次
                mapS(charS) = i
                mapT(charT) = i
            }
            else{
                //兩個對映僅存在一個,則返回false
                if (mapS.contains(charS) || mapT.contains(charT)) return false
                //若都不存在,即更新map
                mapS = mapS.+((charS, i))
                mapT = mapT.+((charT, i))
            }
        }      
        return true
    }
}