JewelsInStones
# 查找J中的每个字符在S出现的次数的总和# Input: J="aA", S="aAAbbbb"# Output: 3def count_J_in_S(J, S):tempdict = {i: S.count(i) for i in set(S)}return sum(tempdict.get(i, 0) for i in set(J))j = input("请输入J:")s = input("请输入S:")print("结果为:", count_J_in_S(j, s))
对字典的使用,包括使用i: S.count(i)统计每个键及其出现的次数;get(i, 0)后的0是指设定默认值为0
找到第一个不重复字符
给定一个字符串,找到第一个不重复的字符,输出索引,如不存在输出 -1。
示例:
s = "loveleetcode"return 2s = "leetcode"return 0s = "aa"return -1
代码:
def findUnique(s):temp = {}for i in s:try:temp[i] += 1except:temp[i] = 1for idx, j in enumerate(s):if(temp[j]==1):return idxreturn -1s = input("Please input a string:")a = findUnique(s)print(a)
注意:这里使用了try...except...的方法获取字符串每个字母及其出现次数的字典。这实际上是简化的 if...else... 好处是这是按顺序排列的。
如果按照temp = {i:s.count(i) for i in s},则结果将是乱序的。
注意这里对enumerate的使用。
还有更好用的方法,是使用自带的 Counter ,这样就不需要 for 循环里套 try…except了:
import collectionstemp = collections.Counter(s)
买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例:
输入: [7,1,5,3,6,4]输出: 7输入: [1,2,3,4,5]输出: 4输入: [7,6,4,3,1]输出: 0
代码:
class Solution:def maxProfit(self, prices: List[int]) -> int:profit = 0for i in range(1, len(prices)):temp = prices[i] - prices[i-1]if(temp > 0):profit += tempreturn profit
思路分析:使所有上涨交易日都买卖(赚到所有利润),所有下降交易日都不买卖(永不亏钱)。【贪心】
