Go Java算法之同構(gòu)字符串示例詳解
同構(gòu)字符串
給定兩個(gè)字符串 s 和 t ,判斷它們是否是同構(gòu)的。
如果 s 中的字符可以按某種映射關(guān)系替換得到 t ,那么這兩個(gè)字符串是同構(gòu)的。
每個(gè)出現(xiàn)的字符都應(yīng)當(dāng)映射到另一個(gè)字符,同時(shí)不改變字符的順序。不同字符不能映射到同一個(gè)字符上,相同字符只能映射到同一個(gè)字符上,字符可以映射到自己本身。
- 示例 1:
輸入:s = "egg", t = "add"
輸出:true
- 示例 2:
輸入:s = "foo", t = "bar"
輸出:false
- 示例 3:
輸入:s = "paper", t = "title"
輸出:true
提示:
1 <= s.length <= 5 * 104
t.length == s.length
s 和 t 由任意有效的 ASCII 字符組成
方法一:哈希表(Java)
此題需要我們判斷 s 和 t 每個(gè)位置上的字符是否都一一對(duì)應(yīng),即 s 的任意一個(gè)字符被 t 中唯一的字符對(duì)應(yīng),同時(shí) t 的任意一個(gè)字符被 s 中唯一的字符對(duì)應(yīng)。這也被稱為「雙射」的關(guān)系。
以示例 2 為例,t 中的字符 a 和 r 雖然有唯一的映射 o,但對(duì)于 s 中的字符 o 來說其存在兩個(gè)映射 {a,r},故不滿足條件。
因此,我們維護(hù)兩張哈希表,第一張哈希表 s2t 以 s 中字符為鍵,映射至 t 的字符為值,第二張哈希表 t2s 以 t 中字符為鍵,映射至 s 的字符為值。
class Solution { public boolean isIsomorphic(String s, String t) { Map<Character, Character> s2t = new HashMap<Character, Character>(); Map<Character, Character> t2s = new HashMap<Character, Character>(); int len = s.length(); for (int i = 0; i < len; ++i) { char x = s.charAt(i), y = t.charAt(i); if ((s2t.containsKey(x) && s2t.get(x) != y) || (t2s.containsKey(y) && t2s.get(y) != x)) { return false; } s2t.put(x, y); t2s.put(y, x); } return true; } }
時(shí)間復(fù)雜度:O(N)
空間復(fù)雜度:O(1)
方法一:哈希表(Go)
具體的方法思路已經(jīng)在上文中表述,具體詳情請(qǐng)看上文內(nèi)容。
方法思路:
- 定義兩個(gè)map容器用于存儲(chǔ)兩個(gè)字符串的映射關(guān)系map_s、map_t
- map_s:以 s 中字符為鍵,映射至 t 的字符為值
- map_t: 以 t 中字符為鍵,映射至 s 的字符為值
- 遍歷字符串(兩個(gè)字符串長(zhǎng)度相等同時(shí)遍歷)
- 不斷更新兩張哈希表,如果出現(xiàn)沖突時(shí)說明兩個(gè)字符串無法構(gòu)成同構(gòu),返回 false。
- 沖突定義:即當(dāng)前下標(biāo) index 對(duì)應(yīng)的字符 map_s[index] 已經(jīng)存在映射且不為 t[index] 或當(dāng)前下標(biāo) index 對(duì)應(yīng)的字符map_t[index] 已經(jīng)存在映射且不為 s[index]也就是代碼中的if判斷條件
func isIsomorphic(s, t string) bool { s2t := map[byte]byte{} t2s := map[byte]byte{} for i := range s { x, y := s[i], t[i] if s2t[x] > 0 && s2t[x] != y || t2s[y] > 0 && t2s[y] != x { return false } s2t[x] = y t2s[y] = x } return true }
時(shí)間復(fù)雜度:O(N)
空間復(fù)雜度:O(1)
以上就是Go Java算法之同構(gòu)字符串示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go Java算法同構(gòu)字符串的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang?sync.Map底層實(shí)現(xiàn)場(chǎng)景示例詳解
這篇文章主要為大家介紹了Golang?sync.Map底層實(shí)現(xiàn)及使用場(chǎng)景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09

GO語言標(biāo)準(zhǔn)錯(cuò)誤處理機(jī)制error用法實(shí)例

Golang使用lua腳本實(shí)現(xiàn)redis原子操作