問題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。