亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go Java算法之同構(gòu)字符串示例詳解

 更新時(shí)間:2022年08月16日 10:19:30   作者:黃丫丫  
這篇文章主要為大家介紹了Go Java算法之同構(gòu)字符串示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

同構(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)文章

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

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

    這篇文章主要介紹了GO語言標(biāo)準(zhǔn)錯(cuò)誤處理機(jī)制error用法,實(shí)例分析了錯(cuò)誤處理機(jī)制的具體用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • golang time包的用法詳解

    golang time包的用法詳解

    這篇文章主要介紹了golang time包的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Golang使用lua腳本實(shí)現(xiàn)redis原子操作

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

    這篇文章主要介紹了Golang使用lua腳本實(shí)現(xiàn)redis原子操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • go語言題解LeetCode228匯總區(qū)間示例詳解

    go語言題解LeetCode228匯總區(qū)間示例詳解

    這篇文章主要為大家介紹了go語言題解LeetCode228匯總區(qū)間示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • go?test?命令示例詳解

    go?test?命令示例詳解

    go?test是Go用來執(zhí)行測(cè)試函數(shù)(test?function)、基準(zhǔn)函數(shù)(benchmark?function)和示例函數(shù)(example?function)的命令,這篇文章主要介紹了go?test?命令,需要的朋友可以參考下
    2023-11-11
  • 最新評(píng)論