JewelsInStones
# 查找J中的每个字符在S出现的次数的总和
# Input: J="aA", S="aAAbbbb"
# Output: 3
def 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 2
s = "leetcode"
return 0
s = "aa"
return -1
代码:
def findUnique(s):
temp = {}
for i in s:
try:
temp[i] += 1
except:
temp[i] = 1
for idx, j in enumerate(s):
if(temp[j]==1):
return idx
return -1
s = 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 collections
temp = 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 = 0
for i in range(1, len(prices)):
temp = prices[i] - prices[i-1]
if(temp > 0):
profit += temp
return profit
思路分析:使所有上涨交易日都买卖(赚到所有利润),所有下降交易日都不买卖(永不亏钱)。【贪心】