本文主要是介绍1672. 最富有客户的资产总量 and 567. 字符串的排列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1672. 最富有客户的资产总量
题解一:
直接遍历,数组求和,一行代码搞定,不解释
class Solution:def maximumWealth(self, accounts: List[List[int]]) -> int:return max(sum(accounts[i]) for i in range(len(accounts)))
567. 字符串的排列
题解二:暴力破解
循环枚举出s1中所有字符可能组合的字符串,然后遍历s1,若s2包含s1 则输出true
题解二:滑动窗口
1.排列不讲究顺序,但是字符出现的 种类 和 次数 要恰好对应相等,因此须要统计字符串 s1 出现的字符的种数和次数,和在字符串 s2 上的两个变量所确定的滑动窗口中出现的字符种数和次数;
2.还须要设计一个变量 count ,表示滑动窗口在 s2 上滑动的时候,出现在 s1 中的字符的种类数,规则如下:
-
如果某一个字符出现的次数恰好等于 s1 中对应字符出现的次数,count += 1;
-
在左边界向右移动的过程当中,某一个字符对应的次数减少以后,恰好小于了 s1 对应的字符出现的次数,count -= 1;
-
当滑动窗口中出现的字符种类数和 s1 中出现的字符种类数相等(根据 count 的定义,对应次数也相等),并且 s2 上的滑动窗口的长度等于字符串 s1 的长度的时候,就找到了 s1 的一个排列。
class Solution:def checkInclusion(self, s1, s2):left = right = 0count = [0] * 26for i in range(len(s1)): count[ord(s1[i]) - ord('a')] += 1while right < len(s2): count[ord(s2[right]) - ord('a')] -= 1 while count[ord(s2[right]) - ord('a')] < 0: count[ord(s2[left]) - ord('a')] += 1 left += 1if right - left + 1 == len(s1): return Trueright += 1return False
这篇关于1672. 最富有客户的资产总量 and 567. 字符串的排列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!