b站視頻播放量網(wǎng)站長沙快速排名優(yōu)化
這里寫目錄標題
- 一、搜索插入位置(35)
- 二、字符串相乘(43)
- 三、兩個相同字符之間的最長子字符串(1624)
- 四、給你一個 有效括號字符串 s,返回該字符串的 s 嵌套深度
一、搜索插入位置(35)
給定一個排序數(shù)組和一個目標值,在數(shù)組中找到目標值,并返回其索引。如果目標值不存在于數(shù)組中,返回它將會被按順序插入的位置。
請必須使用時間復雜度為 O(log n) 的算法。
示例 1:
輸入: nums = [1,3,5,6], target = 5
輸出: 2
示例 2:
輸入: nums = [1,3,5,6], target = 2
輸出: 1
示例 3:
輸入: nums = [1,3,5,6], target = 7
輸出: 4
def erfen_search_insert(nums, target):left = 0right = len(nums) - 1while left <= right:mid = (right + left) // 2if nums[mid] == target:return midelif nums[mid] > target:right = mid - 1else:left = mid + 1return left
二、字符串相乘(43)
給定兩個以字符串形式表示的非負整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。
注意:不能使用任何內(nèi)置的 BigInteger 庫或直接將輸入轉(zhuǎn)換為整數(shù)。
示例 1:
輸入: num1 = “2”, num2 = “3”
輸出: “6”
示例 2:
輸入: num1 = “123”, num2 = “456”
輸出: “56088”
def test11(nums1, nums2):res = 0for i, v in enumerate(nums1[::-1]):for j, u in enumerate(nums2[::-1]):res += int(v) * int(u) * (10 ** (i + j))return str(res)res = test11('123', '456')
print(res)
三、兩個相同字符之間的最長子字符串(1624)
給你一個字符串 s,請你返回 兩個相同字符之間的最長子字符串的長度 ,
計算長度時不含這兩個字符。如果不存在這樣的子字符串,返回 -1 。
子字符串 是字符串中的一個連續(xù)字符序列。
示例 1:
輸入:s = “aa”
輸出:0
解釋:最優(yōu)的子字符串是兩個 ‘a(chǎn)’ 之間的空子字符串。
示例 2:
輸入:s = “abca”
輸出:2
解釋:最優(yōu)的子字符串是 “bc” 。
示例 3:
輸入:s = “cbzxy”
輸出:-1
解釋:s 中不存在出現(xiàn)出現(xiàn)兩次的字符,所以返回 -1 。
示例 4:
輸入:s = “cabbac”
輸出:4
解釋:最優(yōu)的子字符串是 “abba” ,其他的非最優(yōu)解包括 “bb” 和 “” 。
思路:
遍歷所有的字符
當這個字符在字符串中出現(xiàn)兩次時,計算第一個索引和最后一個索引中間的子字符串的數(shù)量
def max_value(strs):n=-1for i in set(strs):if strs.count(i)>1:n=max(n,strs.rfind(i)-strs.find(i)-1)return n
s = "cabbac"
r=max_value(s)
print(r)
四、給你一個 有效括號字符串 s,返回該字符串的 s 嵌套深度
例如:“”、“()()”、“()(()())” 都是 有效括號字符串(嵌套深度分別為 0、1、2),而 “)(” 、“(()” 都不是 有效括號字符串 。
給你一個 有效括號字符串 s,返回該字符串的 s 嵌套深度
示例 1:
輸入:s = “(1+(2*3)+((8)/4))+1”
輸出:3
解釋:數(shù)字 8 在嵌套的 3 層括號中。
示例 2:
輸入:s = “(1)+((2))+(((3)))”
輸出:3
思路:
python 棧思想
核心思路其實就是統(tǒng)計最大的連續(xù)左括號的數(shù)量。
遍歷整個字符串,遇到左括號,總數(shù)+1,遇到右括號總數(shù)-1。
實時更新最大連續(xù)左括號的數(shù)量。
def test(strs):res=0ret=0for i in strs:if i =="(":ret+=1res=max(ret,res)elif i==")":ret-=1return res
s = "(1)+((2))+(((3)))"
r=test(s)
print(r)