携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
30. 串联所有单词的子串
题目 给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。
注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。
示例 1:
输入:s = "barfoothefoobarman", words = ["foo","bar"] 输出:[0,9] 解释: 从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。 输出的顺序不重要, [9,0] 也是有效答案。 示例 2:
输入:s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"] 输出:[] 示例 3:
输入:s = "barfoofoobarthefoobarman", words = ["bar","foo","the"] 输出:[6,9,12]
提示:
1 <= s.length <= 104 s 由小写英文字母组成 1 <= words.length <= 5000 1 <= words[i].length <= 30 words[i] 由小写英文字母组成
代码
from collections import Counter
class Solution:
def findSubstring(self, s: str, words: List[str]) -> List[int]:
s_len = len(s)
w_len = len(words[0])
ws_len = len(words)
ans = []
for i in range(s_len):
if i + w_len * ws_len <= s_len:
cnt = Counter()
for j in range(i, i + w_len * ws_len, w_len):
if s[j:j+w_len] in words:
cnt[s[j:j+w_len]] += 1
for word in words:
cnt[word] -= 1
if cnt[word] == 0:
del cnt[word]
if len(cnt) == 0:
ans.append(i)
return ans
视频
513. 找树左下角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3] 输出: 1 示例 2:
输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7
提示:
二叉树的节点个数的范围是 [1,104] -231 <= Node.val <= 231 - 1
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
def getLevel(root:Optional[TreeNode], level):
cur_val, cur_level = root.val, level
if root.left is not None:
cur_val, cur_level = getLevel(root.left, level+1)
if root.right is not None:
r_val, r_level = getLevel(root.right, level+1)
if r_level > cur_level:
cur_val, cur_level = r_val, r_level
return cur_val, cur_level
cur_val, cur_level = root.val, 0
if root.left is not None:
cur_val, cur_level = getLevel(root.left, 1)
if root.right is not None:
r_val, r_level = getLevel(root.right, 1)
if r_level > cur_level:
cur_val, cur_level = r_val, r_level
return cur_val
视频
1108. IP 地址无效化
题目 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。
所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."。
示例 1:
输入:address = "1.1.1.1" 输出:"1[.]1[.]1[.]1" 示例 2:
输入:address = "255.100.50.0" 输出:"255[.]100[.]50[.]0"
提示:
给出的 address 是一个有效的 IPv4 地址
代码
class Solution:
def defangIPaddr(self, address: str) -> str:
# 既然python不支持字符串字符的替换,那么就来点python特性的解法
ip = address.split('.')
return ip[0] + "[.]" + ip[1] + "[.]" + ip[2] + "[.]" + ip[3]
视频