1. 程式人生 > 實用技巧 >整數構成的字串刪除K個字元後,剩餘字元對應的整數值最小

整數構成的字串刪除K個字元後,剩餘字元對應的整數值最小

輸入一串整數構成的字串,和一個整數K,從字串中隨即刪除K個字元,使得剩下的字元按照原來順序構成的整數最小。

輸入:

第一行 整數構成的字串

第二行是一個整數K

K小於字串長度

輸出:刪除K個字元後剩下的字串

舉例:

輸入:
100
1
輸出:
0
輸入:
12345
1
輸出:
1234
輸入
3753219382
2
輸出
35321382

1.程式碼如下:

import copy

def get_first_inv(tmp):
    cur_ele = sorted(tmp[:k], key=lambda x: x[1])[0]
    flag=False
    
for ele in sorted(tmp[:k], key=lambda x: x[1]): if ele[0] < cur_ele[0]: flag=True break else: cur_ele = ele return flag,cur_ele if __name__ == '__main__': # dd=[[1,0],[2,1],[3,2]] # print(list(zip(*dd))[0]) # exit() string = '12453233708
'#input() k=4#int(input()) # string='1683212' # k=3 data=[] for idx,i in enumerate(string): data.append([int(i),idx]) sort_data=sorted(data, key=lambda x:[-x[0],x[1]]) tmp=copy.deepcopy(data) # data的備份tmp tmp_idx=[] # 記錄刪除的元素 for i in sort_data[:k]: tmp_idx.append(i)
#新增刪除的元素到記錄中 tmp.remove(i) # tmp移除刪除元素 sort_tmp = sorted(tmp[:k]) print(sort_tmp,"\t",tmp,"\t",tmp_idx) flag,first = get_first_inv(tmp) print("flag,first,tmp",flag,first,tmp) cnt=0 while flag: cnt+=1 # 如果不是非遞減序列,# 看看刪除的元素是否有在剩下前面K個元素的後邊 if sorted(tmp[:k], key=lambda x: x[1])[-1][1]>sorted(tmp_idx[:k], key=lambda x:x[1])[-1][1]: # 如果沒有,結束 break else: #if tmp[:k][-1][1]<tmp_idx[:k][-1][1]: #如果有,把剩餘元素前K箇中最大的元素(出現逆序的元素中第一個刪除)刪除,保留後面那個曾經被刪除的元素,保留誰需要判斷 judge = [] ''' [[[1,0],[2,1],[3,2]],[[1,0],[2,1],[3,2]],[[1,0],[2,1],[3,2]]]''' # for ele in tmp[k:]: last_del_ele = [] tmp_idx_copy = copy.deepcopy(tmp_idx) for de in tmp_idx_copy: if de[1] > sorted(tmp[:k], key=lambda x: x[1])[-1][1]: tmp_idx[:k].remove(de) last_del_ele.append(de) print(tmp[k:]) dd = copy.deepcopy(tmp[k:]) dd.append(de) judge.append(dd) print("tmp_idx, last_del_ele, judge,tmp", tmp_idx, last_del_ele, judge,tmp) ss = sorted(judge, key=lambda x: int("".join([str(ele) for ele in list(zip(*x))[0]])))[-1] left = 0 for idx, ele in enumerate(judge): if ele == ss: left = idx # last_del_ele[idx] 這個元素需要保留下來 print("tmp,last_del_ele[idx]",tmp,last_del_ele[idx]) try: tmp.remove(first) # 刪除前面K個元素第一次出現逆序的元素,eg:11323564,刪除3 except: print("first 不存在",first) pass tmp_idx.remove(last_del_ele[left]) tmp.append(last_del_ele[left]) print("tmp.append(last_del_ele[left])",tmp) print("",str(cnt),"".join([str(ele) for ele in list(zip(*sorted(tmp, key=lambda x: x[1])))[0]])) flag, first = get_first_inv(tmp) print("last=","".join([str(ele) for ele in list(zip(*sorted(tmp, key=lambda x: x[1])))[0]]))