JewelsInStones

  1. # 查找J中的每个字符在S出现的次数的总和
  2. # Input: J="aA", S="aAAbbbb"
  3. # Output: 3
  4. def count_J_in_S(J, S):
  5. tempdict = {i: S.count(i) for i in set(S)}
  6. return sum(tempdict.get(i, 0) for i in set(J))
  7. j = input("请输入J:")
  8. s = input("请输入S:")
  9. print("结果为:", count_J_in_S(j, s))

对字典的使用,包括使用i: S.count(i)统计每个键及其出现的次数;get(i, 0)后的0是指设定默认值为0

找到第一个不重复字符

给定一个字符串,找到第一个不重复的字符,输出索引,如不存在输出 -1。
示例:

  1. s = "loveleetcode"
  2. return 2
  3. s = "leetcode"
  4. return 0
  5. s = "aa"
  6. return -1

代码:

  1. def findUnique(s):
  2. temp = {}
  3. for i in s:
  4. try:
  5. temp[i] += 1
  6. except:
  7. temp[i] = 1
  8. for idx, j in enumerate(s):
  9. if(temp[j]==1):
  10. return idx
  11. return -1
  12. s = input("Please input a string:")
  13. a = findUnique(s)
  14. print(a)

注意:这里使用了try...except...的方法获取字符串每个字母及其出现次数的字典。这实际上是简化的 if...else... 好处是这是按顺序排列的。
如果按照temp = {i:s.count(i) for i in s},则结果将是乱序的。
注意这里对enumerate的使用。
还有更好用的方法,是使用自带的 Counter ,这样就不需要 for 循环里套 try…except了:

  1. import collections
  2. temp = collections.Counter(s)

买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例:

  1. 输入: [7,1,5,3,6,4]
  2. 输出: 7
  3. 输入: [1,2,3,4,5]
  4. 输出: 4
  5. 输入: [7,6,4,3,1]
  6. 输出: 0

代码:

  1. class Solution:
  2. def maxProfit(self, prices: List[int]) -> int:
  3. profit = 0
  4. for i in range(1, len(prices)):
  5. temp = prices[i] - prices[i-1]
  6. if(temp > 0):
  7. profit += temp
  8. return profit

思路分析:使所有上涨交易日都买卖(赚到所有利润),所有下降交易日都不买卖(永不亏钱)。【贪心】