1. 程式人生 > >【leetcode】Python實現-205.同構字串

【leetcode】Python實現-205.同構字串

205.同構字串

描述

給定兩個字串 s 和 t,判斷它們是否是同構的。
如果 s 中的字元可以被替換得到 t ,那麼這兩個字串是同構的。
所有出現的字元都必須用另一個字元替換,同時保留字元的順序。兩個字元不能對映到同一個字元上,但字元可以對映自己本身。

示例

輸入: s = “egg”, t = “add”
輸出: true
輸入: s = “foo”, t = “bar”
輸出: false
輸入: s = “paper”, t = “title”
輸出: true

說明:
你可以假設 s 和 t 具有相同的長度。

分析一波:
1)先判斷兩個字串的格式匹不匹配,即是否同為’ABB’等格式,若格式不相同則返回False,否則進入第二步;
2)判斷是否存在不同字元對映到同一字元的情況,若存在,則False。這條判斷通過字典來實現,其中鍵為被對映的字元。比如’eggdd’—>’addaa’為False。在判斷的時候注意不能僅通過該鍵值是否存在,因為會有’paper’—>’title’的情況存在,因為’p’–>’t’存在多次對映,所以還需要判斷dict[t[i]] == s[i] ?

class Solution:
    def isIsomorphic(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        l = len(s)
        if l == 0 or l == 1:
            return True
        d = {t[0]:s[0]}
        for i in range(1, l):
            if s[i] == s[i-1]:
                if
t[i] == t[i-1]: continue else: return False else: if t[i] in d: if d[t[i]] == s[i]: continue else: return False else
: d[t[i]] = s[i] return True

看看別人的提神醒腦:

        return len(set(zip(s,t))) == len(set(s)) == len(set(t))

太高階,over!

相關推薦

leetcodePython實現-205.字串

205.同構字串 描述 給定兩個字串 s 和 t,判斷它們是否是同構的。 如果 s 中的字元可以被替換得到 t ,那麼這兩個字串是同構的。 所有出現的字元都必須用另一個字元替換,同時保留字元的順序。兩個字元不能對映到同一個字元上,但字元可以

leetcodePython實現-122.買賣股票的最佳時機II

122.買賣股票的最佳時機II 描述 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必須在再次

leetcodePython實現-121.買賣股票的最佳時機

121.買賣股票的最佳時機 描述 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。 注意你不能在買入股票前賣出股票。 示例

leetcodePython實現-67.二進位制求和

67.二進位制求和 描述 給定兩個二進位制字串,返回他們的和(用二進位制表示)。 輸入為非空字串且只包含數字 1 和 0。 示例1 輸入: a = “11”, b = “1” 輸出: “100” 示例2 輸入: a

leetcodePython實現-136.只出現一次的數字

136.只出現一次的數字 描述 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。 說明: 你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1:

LeetcodePython實現反轉整數

給定一個 32 位有符號整數,將整數中的數字進行反轉。 示例 1: 輸入: 123 輸出: 321 示例 2: 輸入: -123 輸出: -321 示例 3: 輸入: 120 輸

LeetcodePython實現正則表示式匹配

給定一個字串 (s) 和一個字元模式 (p)。實現支援 ‘.’ 和 ‘*’ 的正則表示式匹配。 ‘.’ 匹配任意單個字元。 ‘*’ 匹配零個或多個前面的元素。 匹配應該覆蓋整個字串 (s) ,而不

LeetcodePython實現Z字形變換

Z字形變換 題意解釋: 比如有一個字串 “0123456789ABCDEF”,轉為zigzag 當 n = 2 時: 0 2 4 6 8 A C E 1 3 5 7 9 B D F 當 n = 4 時: 0 6 C 1

LeetcodePython實現最長迴文子串

動態規劃實現 根據迴文的特性,一個大回文按比例縮小後的字串也必定是迴文,比如ABCCBA,那BCCB肯定也是迴文。所以我們可以根據動態規劃的兩個特點: (1)把大問題拆解為小問題 (2)重複利用之

leetcodePython實現-190.顛倒二進位制位

190.顛倒二進位制位 描述 顛倒給定的 32 位無符號整數的二進位制位。 示例 輸入: 43261596 輸出: 964176192 解釋: 43261596 的二進位制表示形式為 0000001010010100000111

leetcodePython實現-141.環形連結串列

141.環形連結串列 描述 給定一個連結串列,判斷連結串列中是否有環。 進階: 你能否不使用額外空間解決此題? 我…遍歷了以後超出時間限制,於是看大家總結的方法。一個就是設定兩個指標slow和fast,一個步長為1,一個步長為2進行遍歷

leetcodePython實現-225.用佇列實現

225.用佇列實現棧 描述 使用佇列實現棧的下列操作: push(x) – 元素 x 入棧 pop() – 移除棧頂元素 top() – 獲取棧頂元素 empty() – 返回棧是否為空 注意 你只能使用佇列的基本操

leetcodePython實現-203.刪除連結串列中的節點

203.刪除連結串列中的節點 描述 刪除連結串列中等於給定值 val 的所有節點。 示例 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->

leetcodePython實現-13.羅馬數字轉整數

13.羅馬數字轉整數 給定一個羅馬數字,將其轉換成整數。 返回的結果要求在 1 到 3999 的範圍內。 我 d = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

leetcodePython實現-83.刪除排序連結串列中的重複元素

83.刪除排序連結串列中的重複元素 描述 給定一個排序連結串列,刪除所有重複的元素,使得每個元素只出現一次。 示例1 輸入: 1->1->2 輸出: 1->2 示例2 輸入: 1->1->2-

LeetcodePython實現兩個排序陣列的中位數

當兩個數組合並後的總元素長度是奇數時,中位數的下標是n/2。 當兩個數組合並後的總元素個數是偶數時,中位數是下標n/2-1和下標n/2兩個元素的平均值。 所以不論總長度的奇偶性,可以將n/2作為右中

leetcodePython實現-168.Excel表列名稱

168.Excel表列名稱 描述 給定一個正整數,返回它在 Excel 表中相對應的列名稱。 例如, 1 -> A 2 -> B 3 -> C … 26 -&

LeetcodePython實現無重複字元的最長子串

給定一個字串,找出不含有重複字元的最長子串的長度。 示例: 給定 “abcabcbb” ,沒有重複字元的最長子串是 “abc” ,那麼長度就是3。 給定 “bbbbb” ,最長的子串就是 “b” ,長度是1。 給定 “pwwkew” ,最長子串是 “wk

LeetcodePython實現整數與羅馬數字的相互轉換

整數轉羅馬數 class Solution(object): def intToRoman(self, num): """ :type num: int

leetcodePython實現-198.打家劫舍

198.打家劫舍 描述 你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。 給定一個代表每個房屋存放金額的非負整