leetcode205. 同构字符串 一般人一次做不对的简单题
生活随笔
收集整理的這篇文章主要介紹了
leetcode205. 同构字符串 一般人一次做不对的简单题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給定兩個(gè)字符串?s?和?t,判斷它們是否是同構(gòu)的。
如果?s?中的字符可以被替換得到?t?,那么這兩個(gè)字符串是同構(gòu)的。
所有出現(xiàn)的字符都必須用另一個(gè)字符替換,同時(shí)保留字符的順序。兩個(gè)字符不能映射到同一個(gè)字符上,但字符可以映射自己本身。
示例 1:
輸入: s = "egg", t = "add"
輸出: true
示例 2:
輸入: s = "foo", t = "bar"
輸出: false
示例 3:
輸入: s = "paper", t = "title"
輸出: true
說明:
你可以假設(shè)?s?和 t 具有相同的長度。
思路:見代碼:我們記住每一個(gè)s中出現(xiàn)的字符,和對應(yīng)的t中的字符。
在之后的遍歷中,要么在s中遇到新的字符,要么符合之前的記錄。否則是false。
?然后就涼了。
后來想了一下:比如ab和aa,從s到t的角度看:a對應(yīng)a,b對應(yīng)a,檢查的沒毛病。
但是從t到s的角度看:a對應(yīng)了a和b兩個(gè)字符,明顯不對。
所以同樣的代碼邏輯應(yīng)該正著跑一遍,反著跑一遍。
class Solution {public boolean isIsomorphic(String s, String t) {return isIsomorphicHelper(s, t) && isIsomorphicHelper(t, s);}private boolean isIsomorphicHelper(String s, String t) {int n = s.length();HashMap<Character, Character> map = new HashMap<>();for (int i = 0; i < n; i++) {char c1 = s.charAt(i);char c2 = t.charAt(i);if (map.containsKey(c1)) {if (map.get(c1) != c2) {return false;}} else {map.put(c1, c2);}}return true;} }?
?
總結(jié)
以上是生活随笔為你收集整理的leetcode205. 同构字符串 一般人一次做不对的简单题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关系数据库——并发控制
- 下一篇: 数组实现栈