LeetCode題庫第二十題(簡單系列)
題目及要求:
給定一個只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字串,判斷字串是否有效。
有效字串需滿足:
- 左括號必須用相同型別的右括號閉合。
- 左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 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 Title(Java實現)
這是悅樂書的第180次更新,第182篇原創 01 看題和準備 今天介紹的是LeetCode演算法題中Easy級別的第39題(順位題號是168)。給定正整數,返回Excel工作表中顯示的相應列標題。例如: 1 - > A. 2 - > B. 3 - > C. 26 - >