【演算法 in python】匹配括號
一個合法的括號匹配序列有以下定義:
1、空串""是一個合法的括號匹配序列
2、如果"X"和"Y"都是合法的括號匹配序列,"XY"也是一個合法的括號匹配序列
3、如果"X"是一個合法的括號匹配序列,那麼"(X)"也是一個合法的括號匹配序列
4、每個合法的括號序列都可以由以上規則生成。
例如: "","()","()()","((()))"都是合法的括號序列
對於一個合法的括號序列我們又有以下定義它的深度:
1、空串""的深度是0
2、如果字串"X"的深度是x,字串"Y"的深度是y,那麼字串"XY"的深度為max(x,y) 3、如果"X"的深度是x,那麼字串"(X)"的深度是x+1
例如: "()()()"的深度是1,"((()))"的深度是3。牛牛現在給你一個合法的括號序列,需要你計算出其深度。
def depth(s):
left = 0
res = 0
for i in range(len(s)):
if s[i] == '(':
left += 1
res = max(left, res)
else:
left -= 1
return res
相關推薦
【演算法 in python】匹配括號
一個合法的括號匹配序列有以下定義: 1、空串""是一個合法的括號匹配序列 2、如果"X"和"Y"都是合法的括號匹配序列,"XY"也是一個合法的括號匹配序列 3、如果"X"是一個合法的括號匹配序列,那麼"(X)"也是一個合法的括號匹配序列 4、每個合法的括號序列都可以由以上規則生成。 例如: "","
【演算法 in python】排序演算法
1. 氣泡排序 def bubbleSort(arr): for i in range(len(arr)-1): for j in range(len(arr)-1-i): if arr[j] > a
【演算法 in python】查詢演算法
1. 順序查詢 無序序列or順序序列 時間複雜度:O(n) ASL = (n+1)/2 def search(arr, a): for i in range(len(arr)): if arr[i] == a: return i
【演算法 in python】全排列
1.全排列 給定一個沒有重複數字的序列,返回其所有可能的全排列 #遞迴,取一個數放在第一個位置,然後求剩下資料的全排列,以此類推 class Solution: def permute(self, nums): """ :type nums: List
【演算法 in python | DP】斐波那契數列vs卡塔蘭數列
1. 斐波那契數列 公式: 應用:爬樓梯 假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? class Solution: def climbStairs(self, n):
【演算法 in python | DP】子串和(乘積)最大
1. 最大子序和 給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。nums中有正有負。 class Solution: def maxSubArray(self, nums): res = [0
【演算法 in python | 樹】其他試題
1. 對稱二叉樹 判斷一個樹是否是對稱的。(遞迴) def sym(head): if head is None: return True else: return cmp(head.left, head.right) def cmp(left
【演算法 in python | 樹】二叉樹遍歷
二叉樹深度優先遍歷:先序遍歷,中序遍歷,後序遍歷的遞迴與非遞迴。 二叉樹廣度優先遍歷:層次遍歷。 class TreeNode: def __init__(self, x): self.val = x self.left = None
【演算法 in python | DP】紙幣面額拼湊
給你六種面額1、5、10、20、50、100元的紙幣,假設每種幣值的數量都足夠多,編寫程式求組成N元(N為0-10000的非負整數)的不同組合的個數。 def fun(n): money = [1,5,10,20,50,100] dp = [0 for i in range(n+
【演算法 in python | DP】LCS最長公共子串
1. LCS,最長公共子串 動態規劃,狀態轉移方程: #該版本是返回最長公共子串和其長度,若只返回長度,則可以簡化 def lcs(s1, s2): l1 = len(s1) l2 = len(s2) # res[i][j]儲存子串s1[0:i] 和 子串s2[
【死磕演算法·字串問題】字串括號匹配問題
題目大意: 給定一個字串,判定字串是否是括號的有效組合。 如“(())”返回true;“)))((("返回false; 思路: 1、維護變數num,表示當前已經遍歷的部分字串中‘(’和')'數量的差值 2、遍歷遇到左括號,num++; 3、遍歷遇到右括號,num--; 4
零件分組【貪心演算法習題python】
題目描述 某工廠生產一批棍狀零件,每個零件都有一定的長度(Li)和重量(Wi)。現在為了加工需要,要將它們分成若干組,使每一組的零件都能排成一個長度和重量都不下降(若i<j,則Li<=Lj
【NOJ1085】【演算法實驗四】【DP_動態規劃】花生米(五)
1086.花生米(五) 時限:1000ms 記憶體限制:10000K 總時限:3000ms 描述 五一長假第六天,Tom在QQ上遇到了Kitty。呵呵,Kitty,在離散數學課上認識的PPMM……等等!Tom恍然大悟:自己這一生除了看帖不回之外最大的錯誤就是離散數學
【NOJ1084】【演算法實驗四】【DP_動態規劃】花生米(三)
1084.花生米(三) 時限:1000ms 記憶體限制:10000K 總時限:3000ms 描述 五一長假第三天,Tom和Jerry在倉庫散步的時候又發現了一堆花生米(倉庫,又見倉庫……)。這次Tom制定分花生米規則如下: ???????1、Tom和Je
【演算法 詳解】 二維動態規劃
馬攔過河卒 原題傳送門 這一到題目也是比較基礎的動態規劃,也可以理解為是遞推,主要是運用加法原理,思維難度不大。我們要求從 (0,0) ( 0
【演算法詳解】對於單調棧的重新理解
對於單調棧的重新理解 關於什麼是單調棧和為什麼要用單調棧: 亂頭髮節 地平線 Largest Rectangle in a Histogram 關於什麼是單調棧和為什麼要用單調棧: 單調棧,就是棧中的元
【NOJ1083】【演算法實驗四】【DP_動態規劃】花生米(二)
1083.花生米(二) 時限:1000ms 記憶體限制:10000K 總時限:3000ms 描述 五一長假第二天,Tom和Jerry在倉庫散步的時候又發現了一堆花生米(這個倉庫還真奇怪)。這次Tom制定分花生米規則如下: &nbs
學習筆錄【演算法效率分析】
注意:本文摘自《資料結構——從概念到C實現》【王紅梅 皮德常 編著】 目錄 文章目錄 演算法效率分析 演算法的時間複雜度 演算法的空間複雜度 演算法效率分析 度量演算法的
【演算法微解讀】淺談線段樹
淺談線段樹 (來自TRTTG大佬的供圖) 線段樹個人理解和運用時,認為這個是一個比較實用的優化演算法。 這個東西和區間樹有點相似,是一棵二叉搜尋樹,也就是查詢節點和節點所帶值的一種演算法。 使用線段樹可以快速的查詢某一個節點在若干條線段中出現的次數,時間複雜度為O(logN),這個時間複雜度非常的理想,但是空
【演算法微解讀】淺談01分數規劃
淺談01分數規劃 所謂01分數規劃,看到這個名字,可能會想到01揹包,其實長得差不多。 這個演算法就是要求“價效比”最高的解。sum(v)/sum(w)最高的解。 定義 我們給定兩個陣列,a[i]表示選取i的收益,b[i]表示選取i的代價。如果選取i,定義x[i]=1否則x[i]=0。每個物品只有選和不選的