1. 程式人生 > >LeetCode題庫第二十題(簡單系列)

LeetCode題庫第二十題(簡單系列)

題目及要求:

給定一個只包括 '('')''{''}''['']' 的字串,判斷字串是否有效。

有效字串需滿足:

  1. 左括號必須用相同型別的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true

思路:

1.看到題目的時候首先想到的是鍵值對,將左括號和右括號連線起來,然後去遍歷。

2.其次是將左右括號進行計數。(ps,嘗試以後發現行不通)

3.然後將對應的括號的索引值標記出來。(後來也行不通)

嘗試1:

def isValid(s):
    list1=["(",")","{","}","[","]"]
    list2=[]
    if s[0]=="": return True
    if s.count(list1[0]) != s.count(list1[1]): return False
    if s.count(list1[2]) != s.count(list1[3]): return False
    if s.count(list1[4]) != s.count(list1[5]): return False
    for i in list1:
        if i in s:
            n=s.index(i)
            if i in s[n+1:]:
                n2=s[n+1:].index(i)
                ls=[i,n,n2]
            list2.append(ls)
    n=len(list2)
    for i in range(0,n-1,2):
        if (list2[i+1][1]-list2[i][1])%2==1:
            return True
        else:
            return False

以上程式碼最後是行不通的,之前也有含有字典的程式碼也是行不通的委屈委屈委屈

然後實在是沒有思路的,網路上搜索了一下,看到了這篇文章【leetcode】Python實現-20.有效的括號,根據裡面的方法自己再嘗試了一遍,有了如下程式碼,此程式碼執行可通過:

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        list1 = [None]
        dict={'(':')','{':'}','[':']'}
        if len(s)%2==1:return False
        if s=="":return True
        for i in s:
            if i in dict:
                    list1.append(dict[i])#list1裡面可能含有的值[')',']','}']
            else:
                    if i not in list1:#如果‘)',']','}'不在裡面,說明前面沒有對應的'(','{','['
                        return False
                    else:
                        list1.pop(-1)
        return len(list1)==1

最後把原文章大神的程式碼貼出來

a = {')': '(', ']': '[', '}': '{'}#固有思維是按照左括號對應右括號來寫的,新思維可以反過來
l = [None]  # 設定None是為了排除空值的情況!
for i in s:#大神的for以下的部分需要費點時間去理解
    if i in a and a[i] == l[-1]:
        l.pop()
    else:
        l.append(i)
return len(l) == 1

總結:

1.鍵值對做字典,除了慣例的‘(‘:’)’外,還可以反過來。

2.需要懂得s.pop的用法,這個在判斷資料重複,及其他資料的判斷上面很有幫助。

3.理解在list中新增None值得意義,在之後的程式設計中也會很有用。

最後還是發個圖,大笑大笑大笑


相關推薦

LeetCode第二簡單系列

題目及要求:給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。有效字串需滿足:左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1:輸入: "()" 輸出: true 示例 2:輸入: "

LeetCode第二簡單系列

簡單系列的第二十一題對於Python有序連結暫時沒有弄明白是怎麼操作的,只是看了別人大神的程式碼過了,所以暫時不寫。 現在由二十六題開始繼續做題。 題目: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外

LeetCode記錄——第二有效的括號

20.有效的括號 題目描述 思路分析 程式碼實現 題目描述 給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。 有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的

LeetCode第七簡單系列

題目及要求:給定一個 32 位有符號整數,將整數中的數字進行反轉。示例 1:輸入: 123 輸出: 321  示例 2:輸入: -123 輸出: -321 示例 3:輸入: 120 輸出: 21 注意:假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 

LeetCode第十三簡單系列

題目及要求羅馬數字包含以下七種字元:I, V, X, L,C,D 和 M。字元 數值 I 1 V 5 X 10 L 50 C 100 D

LeetCode之楊輝三角二簡單模擬

問題描述: 給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。 在楊輝三角中,每個數是它左上方和右上方的數的和。 示例: 輸入: 3 輸出: [1,3,3,1] 進階: 你可以優化你的演算法

android開源---Dagger2入門學習簡單使用

Dagger2依賴注入 前面我們做好學習準備接下來就要研究如何使用了,俗話說的好,一個東西需要先會用,然後才更好的學習原理。 一、匯入Dagger2 在工程的build.gradle檔案中新增android-apt外掛(該外掛後面介紹) buil

redis 一百二簡單介紹之第一篇

### 前言 總結自己的redis,日常使用不是特別頻繁,所以比較基礎。 ### 開篇 redis 是無關係型資料庫,因為其實記憶體資料庫,所以常常和他的競爭對手memcached對比,因為兩者原理基礎相似,儲存方式也是key和value的方式。 在memcached中value只能是字串,而redis就

有效的括號leet簡單第二

ps:因為筆者也是個剛接觸程式語言的菜鳥,所以這裡的文章都是拿c語言寫的,如果同學們想拿其他語言可以在讀懂原理之後用其他語言書寫 給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。 有效字串需滿足: 左括號必須用相同型別的右括號閉合

LeetCode記錄——第二實現strStr()

28.實現strStr() 題目描述 程式碼實現 題目描述 實現 strStr() 函式。 給定一個 haystack 字串和一個 needle 字串,在 haystack 字串中找出 needle 字串出現的第一個位置 (從0開始)

LeetCode記錄——第二移除元素

27.移除元素 題目描述 思路 程式碼實現 題目描述 給定一個數組 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(

LeetCode記錄——第二刪除排序陣列的重複項

26.刪除排序陣列的重複項 題目描述 思路分析 程式碼實現 題目描述 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用

LeetCode第二:兩樹相加C語言

給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。 你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。 示例: 輸入:(2 -> 4 -> 3) + (5 -> 6

Leetcode第一(簡單系列

第一題:給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例:給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9

LeetCode之Roman & Integer 的轉換簡單

羅馬數字和現在使用的阿拉伯整數之間的轉換在LeetCode上一共有兩道題目:Roman to Integer 和Integer to Roman 如標題所說的,這是個簡單的字串處理的題目,基本上知道了規則就可以直接寫出程式碼解決了。 羅馬數字基本規則 做好

python 每日一練之0004➕file方法簡單

前文 前幾天考試太多一直沒時間寫今天繼續 正文 路漫漫~今天做的第四題發現好像是蠻簡單的,但是看網上大佬們選擇的方法都是正則表示式,。。。我這裡貼出一個簡單的方法吧。為那些看不懂正則的小白們貼一貼 # -*- coding: utf-8 -*- def main(words): with

C#LeetCode之#704-二分查詢Binary Search

問題 給定一個 n 個元素有序的(升序)整型陣列 nums 和一個目標值 target  ,寫一個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。 輸入: nums = [-1,0,3,5,9,12], target = 9 輸出:

C#LeetCode之#824-山羊拉丁文Goat Latin

問題 給定一個由空格分割單詞的句子 S。每個單詞只包含大寫或小寫字母。 我們要將句子轉換為 “Goat Latin”(一種類似於 豬拉丁文 - Pig Latin 的虛構語言)。 山羊拉丁文的規則如下: 如果單詞以母音開頭(a, e, i, o, u),在單詞後新增"ma"。 例

C#LeetCode之#788-旋轉數字Rotated Digits

問題 我們稱一個數 X 為好數, 如果它的每位數字逐個地被旋轉 180 度後,我們仍可以得到一個有效的,且和 X 不同的數。要求每位數字都要被旋轉。 如果一個數的每位數字被旋轉以後仍然還是一個數字, 則這個數是有效的。0, 1, 和 8 被旋轉後仍然是它們自己;2 和 5 可以互相旋轉成

LeetCode演算法-Excel Sheet Column TitleJava實現

這是悅樂書的第180次更新,第182篇原創 01 看題和準備 今天介紹的是LeetCode演算法題中Easy級別的第39題(順位題號是168)。給定正整數,返回Excel工作表中顯示的相應列標題。例如: 1 - > A. 2 - > B. 3 - > C. 26 - >