文章目錄
- 1.尋找相同字串
- 2.密鑰格式化
- 3.五鍵鍵盤的輸出
- 4.單詞重量
- 5.輸出指定字母在字符串的中的索引
- 6.污染水域
- 7.九宮格按鍵輸入
- 8.任務最優調度
- 9.高效的任務規劃
1.尋找相同字串
題目描述:
給你兩個字符串t和p,要求從t中找到一個和p相同的連續子串,并輸出該子串第一個字符的下標。
輸入描述:
輸入文件包括兩行 分別表示字符串t和p
保證t的長度不小于p
且t的長度不超過1000000
p的長度不超過10000
輸出描述:
如果能從t中找到一個和p相等的連續子串,則輸出該子串第一個字符在t中的下標,下標從左到右依次為1,2,3,…;
如果不能,則輸出 “No”
如果含有多個這樣的子串,則輸出第一個字符下標最小的
用例:
輸入:AVERDXIVYERDIAN
RDXI
輸出:4
"""尋找相同字串"""def search_same_string(t: str, p: str):""""""t_len = len(t)p_len = len(p)for i in range(t_len):if t[i] == p[0]:for j in range(p_len):if t[i+j] != p[j]:breakelse:return i + 1return "No"t = "AVERDXIVYERDIAN"
p = "RDXI"
result = search_same_string(t, p)
print(result)
2.密鑰格式化
題目描述:
給定一個非空字符串 S,其被 N 個’-‘分隔成 N+1 的子串,給定正整數 K,要求除第一個子串外,其余的串每 K 個用’-‘分隔,并將小寫字母轉換為大寫。
輸入描述:
正整數 K 和‘-’分割的字符串,如:
2
25G3C-abc-d
輸出描述:
轉換后的字符串
用例1:
輸入:4
5F3Z-2e-9-w
輸出:5F3Z-2E9W
用例2:
輸入:2
2-5g-3-J
輸出:2-5G-3J
"""密鑰格式化"""def key_format(k: int, s: str):""""""s_split = s.split("-")post_s = "".join(s_split[1:]).upper()post_s_split = [post_s[i:i+k] for i in range(0, len(post_s), k)]post_s = "-".join(post_s_split)result = f"{s_split[0]}-{post_s}"return resultk = 4
s = "5F3Z-2e-9-w"
result = key_format(k, s)
print(result)
3.五鍵鍵盤的輸出
題目描述:
有一個特殊的5鍵鍵盤,上面有a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五個鍵。
a鍵在屏幕上輸出一個字母a;
ctrl-c將當前選擇的字母復制到剪貼板;
ctrl-x將當前選擇的字母復制到剪貼板,并清空選擇的字母;
ctrl-v將當前剪貼板里的字母輸出到屏幕;
ctrl-a選擇當前屏幕上的所有字母。
注意:
剪貼板初始為空,新的內容被復制到剪貼板時會覆蓋原來的內容
當屏幕上沒有字母時,ctrl-a無效
當沒有選擇字母時,ctrl-c和ctrl-x無效
當有字母被選擇時,a和ctrl-v這兩個有輸出功能的鍵會先清空選擇的字母,再進行輸出
給定一系列鍵盤輸入,輸出最終屏幕上字母的數量。
輸入描述:
輸入為一行,為簡化解析,用數字1 2 3 4 5代表a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五個鍵的輸入,數字用空格分隔。
輸出描述:
輸出一個數字,為最終屏幕上字母的數量。
用例1:
輸入:[1, 1, 1]
輸出:3
用例2:
輸入:[1, 1, 5, 1, 5, 2, 4, 4]
輸出:2
"""5鍵鍵盤的輸出"""def five_key_board(opts: list):""""""output = ""select = ""backup = ""for n in opts:if n == 1:if select:output = ""select = ""output += "a"if n == 2:if not select:continuebackup = selectif n == 3:if not select:continuebackup = selectoutput = ""if n == 4:if select:output = ""select = ""output += backupif n == 5:if not output:continueselect = outputreturn len(output)opts = [1, 1, 5, 1, 5, 2, 4, 4]
result = five_key_board(opts)
print(result)
4.單詞重量
題目描述:
每個句子由多個單詞組成,句子中的每個單詞的長度都可能不一樣,我們假設每個單詞的長度Ni為該單詞的重量,你需要做的就是給出整個句子的平均重量V。
輸入描述:
無
輸出描述:
無
用例1:
輸入:“Who Love Solo”
輸出:3.67
"""單詞重量"""def word_weight(s: str):""""""words = s.split()words_len = len(words)all_w = 0for word in words:all_w += len(word)result = round(all_w / words_len, 2)return results = "Who Love Solo"
result = word_weight(s)
print(result)
5.輸出指定字母在字符串的中的索引
題目描述:
給定一個字符串,把字符串按照大寫在前小寫在后排序,輸出排好后的第 K 個字母在原來字符串的索引。
相同字母輸出第一個出現的位置。
輸入描述:
無
輸出描述:
無
用例1:
輸入:hAkDAjByBq
4
輸出:6
"""輸出指定字母在字符串的中的索引"""def output_index(s: str, k: int):""""""new_s = sorted(s)s_len = len(s)for i in range(s_len):if s[i] == new_s[k-1]:return is = "hAkDAjByBq"
k = 4
result = output_index(s, k)
print(result)
6.污染水域
題目描述:
輸入一行字符串,字符串可轉換為N*N的數組,數組可認為是一個水域,判斷多少天后,水域被全部污染。
數組中只有0和1,0表示純凈,1表示污染,每天只可污染上下左右的水域,如果開始全部被污染,或永遠無法污染,則返回-1。
輸入描述:
無
輸出描述:
無
用例1:
輸入:[[1,0,1], [0,0,0], [1,0,1]]
輸出:2
用例2:
輸入:[[0,0], [0,0]]
輸出:-1
"""污染水域"""def pollute_water(nums: list):""""""polluted = []nums_len = len(nums)for x in range(nums_len):for y in range(nums_len):if nums[x][y] == 0:continuepolluted.append((x, y))if not polluted or len(polluted) == nums_len * nums_len:return -1def operate():polluted_len = len(polluted)for i in range(polluted_len):x = polluted[i][0]y = polluted[i][1]if x - 1 >= 0 and (x - 1, y) not in polluted:polluted.append((x - 1, y))if x + 1 < nums_len and (x + 1, y) not in polluted:polluted.append((x + 1, y))if y - 1 >= 0 and (x, y - 1) not in polluted:polluted.append((x, y - 1))if y + 1 < nums_len and (x, y + 1) not in polluted:polluted.append((x, y + 1))day = 1while True:operate()if len(polluted) == nums_len * nums_len:return dayday += 1nums = [[1, 0, 1],[0, 0, 0],[1, 0, 1],
]
result = pollute_water(nums)
print(result)
7.九宮格按鍵輸入
題目描述:
九宮格按鍵輸入,輸出顯示內容,有英文和數字兩個模式,默認是數字模式,數字模式直接輸出數字,英文模式連續按同一個按鍵會依次出現這個按鍵上的字母,如果輸入”/”或者其他字符,則循環中斷。
字符對應關系如圖:
1: ,.
2: abc
3: def
4: ghi
5: jkl
6: mno
7: pqrs
8: tuv
9: wxyz
#:
0: 空格
/:
要求輸入一串按鍵,輸出屏幕顯示。
輸入描述:
輸入范圍為數字 0~9 和字符’#’、’/’,輸出屏幕顯示,例如,
在數字模式下,輸入 1234,顯示 1234
在英文模式下,輸入 1234,顯示 ,adg
輸出描述:
#用于切換模式,默認是數字模式,執行#后切換為英文模式;
/表示延遲,例如在英文模式下,輸入 22/222,顯示為 bc;
英文模式下,多次按同一鍵,例如輸入 22222,顯示為 b;
用例1:
輸入:“123#222235/56”
輸出:“123adjjm”
"""九宮格按鍵輸入"""def nine_key_input(s: str):""""""nums_dict = {"1": ",.","2": "abc","3": "def","4": "ghi","5": "jkl","6": "mno","7": "pqrs","8": "tuv","9": "wxyz","#": "","0": "空格","/": "",}num_mode = Truenum_index = ["-1", 0]output = []s_len = len(s)for i in range(s_len):if s[i] == "/":num_index = ["-1", 0]continueif s[i] == "#":num_mode = Falsecontinueif num_mode:output.append(s[i])num_index = ["-1", 0]continueif s[i] == "0":output.append(" ")continueif s[i] == num_index[0]:s_i_len = len(nums_dict[s[i]])if num_index[1] + 1 == s_i_len:num_index[1] = 0else:num_index[1] += 1output[-1] = nums_dict[s[i]][num_index[1]]continueoutput.append(nums_dict[s[i]][0])num_index = [s[i], 0]result = "".join(output)return results = "123#222235/56"
result = nine_key_input(s)
print(result)
8.任務最優調度
題目描述:
給定一個正整數數組表示待系統執行的任務列表,數組的每一個元素代表一個任務,元素的值表示該任務的類型。
請計算執行完所有任務所需的最短時間。
任務執行規則如下:
1.任務可以按任意順序執行,且每個任務執行耗時間均為1個時間單位。
2.兩個同類型的任務之間必須有長度為N個單位的冷卻時間,比如N為2時,在時間K執行了類型3的任務,那么K+1和K+2兩個時間不能執行類型3任務。
3.系統在任何一個單位時間內都可以執行一個任務,或者等待狀態。
說明:數組最大長度為1000,數組最大值1000。
輸入描述:
1.第一行記錄一個用半角逗號分隔的數組,數組長度不超過1000,數組元素的值不超過1000,
2.第二行記錄任務冷卻時間,N為正整數,N<=100。
輸出描述:
輸出為執行完所有任務所需的最短時間。
用例1:
輸入:[2, 2, 2, 3]
2
輸出:7
"""任務最優調度"""def task_optimal_solution(nums: list, n: int):""""""nums_len = len(nums)min_time = 0task = 1task_seq = []while task <= nums_len:add_time_min = -1task_index = 0for i in range(nums_len):if i in task_seq:continuetask_seq_len = len(task_seq)for j in range(-1, -n-1, -1):if -j > task_seq_len:continueif nums[i] == nums[task_seq[j]]:add_time = 1 + n + j + 1breakelse:add_time = 1if add_time_min == -1 or add_time < add_time_min:add_time_min = add_timetask_index = imin_time += add_time_mintask_seq.append(task_index)task += 1return min_timenums = [2, 2, 2, 3]
n = 2
result = task_optimal_solution(nums, n)
print(result)
9.高效的任務規劃
題目描述:
你有 n 臺機器,編號為 1~n,每臺都需要完成一項工作,機器經過配置后都能獨立完成一項工作。
假設第 i 臺機器你需要花 Bi 分鐘進行設置,然后開始運行,Ji 分鐘后完成任務。
現在,你需要選擇布置工作的順序,使得用最短的時間完成所有工作。
注意,不能同時對兩臺進行配置,但配置完成的機器們可以同時執行他們各自的工作。
輸入描述:
第一行輸入代表總共有 M 組任務數據(1<M<=10)。
每組數第一行為一個整數指定機器的數量 N(0<N<=1000)。隨后的 N 行每行兩個整數,第一個表示 B(0<=B<=10000),第二個表示 J(0<=J<=10000)。
每組數據連續輸入,不會用空行分隔。各組任務單獨計時。
輸出描述:
對于每組任務,輸出最短完成時間。
用例1:
輸入:1
1
2 2
輸出:4
用例2:
輸入:1
3
1 1
2 2
3 3
輸出:7
"""高效的任務規劃"""def optimal_task_plan(n: list):""""""n_len = len(n)machine = 1machine_seq = []all_config_time = 0min_time = 0while machine <= 2:config_time = -1machine_ind = 0max_run_time = -1for i in range(n_len):if i in machine_seq:continuerun_time = n[i][1]if max_run_time == -1 or run_time > max_run_time:max_run_time = run_timeconfig_time = n[i][0]machine_ind = imachine_seq.append(machine_ind)all_config_time += config_timemin_time = max(min_time, all_config_time + max_run_time)machine += 1return min_timen = [(1, 1), (2, 2), (3, 3)]
result = optimal_task_plan(n)
print(result)