问题1
思路及解答
# collections 库的使用
import sys
from collections import Counter
def read_data():
data = sys.stdin.readline().strip()
c = dict(Counter(data))
res = list(sorted(c.values(),reverse=True))
print(res[0])
if __name__=="__main__":
read_data()
# collections 库的使用 —— 我写的
from collections import Counter
s = "aba"
# s = input().strip()
dic = Counter(s)
print(max(dic.values()))
# 我的解法:转换为求单个字符的最大次数。
# s = "aba"
s = input().strip()
result = 0
for item in s:
result = s.count(item) if result < s.count(item) else result
print(result)
问题2
据说题目修改成了求可能的终点个数,我也是交了卷才知道改题目了,下面是我求起点个数的思路和代码。
思路及解答
# 思路很简单,因为是求起点,那么就很简单,只要该起点能走出来在[1, N]之间即可,但如果是终点就比较复杂了,下面是可能的起点个数求解。
N, M = map(int, input().split())
List = []
for i in range(M):
List.append(int(input()))
count = 0
res = []
def backTrack(start, List):
flag = 0
f = 0
for j in range(M):
if 1 <= start + List[j] <= N:
start += List[j]
elif 1 <= start - List[j] <= N:
start -= List[j]
else:
f = 1
break
if not f: # 这两种写法还是有区别的!下面那种不对!
flag = 1
# if j == M-1: # 对于 j == M -1 的情况,还会进入循环并且执行 if 语句,然而此时也有可能执行最后 break 的情况,所以这个种情况不能算进去,但这里加上了,所以以后这种情况最好用一个标志位判断是否 break 跳出!
# flag = 1
return flag
for start in range(1, N + 1): # 遍历起点[1, N]
if backTrack(start, List) == 1:
count += 1
print(count)
修改后的题目及解答:
知识点
1. Counter 库函数
Counter 是计数函数,我的心得:它的返回值像是 dict 类型的,但又不完全是,但又能用 .keys() 和 .values() 操作,并且用 dict() 可以将它转换为完全的 dict 类型!见下图。
(参考:Python count()方法)
2. 技巧性的想法
对于第一题,求的是子串出现的最大次数,经过分析最大次数一定是单个字符出现的最大次树,因此转化为求解单个字符出现的次数最大值。
3. 三目运算符一定要写全了!不然会报错!如下图。
4. dic['key'] 和 dic.get(key, default = None)的区别
(1) dic['key']:只能获取 dic 里存在的 key 对应的 value;如果不存在,则会触发 KeyError。
(2) dic.get(key, default = None):如果存在该 key,那么返回对应的 value,否则返回 default 的值,若没有设置则返回 None。