zoukankan      html  css  js  c++  java
  • 数字字符串变换

    1.

    0285219430826
    4
    0 2
    2 3
    8 4
    4 7
    3375319733736
    import copy
    def dfs(matrix,visited,i,cnt,id):
        for j in range(len(matrix)):
            if matrix[i][j]==1 and visited[j]==0:
                visited[j]=1
                id[j]=cnt
                dfs(matrix,visited,j,cnt,id)
    if __name__ == '__main__':
        string =input()
    #     string = '0285219430826'
        n=10
        m=int(input())
        data = []
        for _ in range(m):
            data.append(list(map(int,input().split())))
            pass
    #     data = [[0,2],[2,3],[8,4],[4,7]]
        matrix=[[0]*n  for _ in range(n)]
        visited=[0]*n  # 记录每个节点是否被访问过
        id=[-1]*n # 记录每个节点对应的联通分区编号
        for i in range(n):
            matrix[i][i]=1
        for i,j in data:
            matrix[i][j]=1
            matrix[j ][i] = 1
        cnt=0
        for i in range(len(matrix)):
            if visited[i]==0:
                dfs(matrix,visited,i,cnt,id)
                cnt+=1
        #print(cnt,id)
        
        #print(len(set(id)))
        dic={}
        for idx,ele in enumerate(id):
            dic.setdefault(ele,[])
            dic[ele].append(idx)
        #print(dic)
        new_dic = copy.deepcopy(dic)
        for key,val in new_dic.items():
            if len(val)<2:
                del dic[key]
        #print(dic)  # dic是连通分量字典
        lst = []
        for i in range(m):
            lst.append(data[i][0])
            lst.append(data[i][1])
        
        idx_dic = {}
        for i,ele in enumerate(lst):
            idx_dic.setdefault(ele,i)
            idx_dic[ele]=i
    #     求出每一个连通分量的最大索引值对应的数字
        max_idx_num=[]
        for k,v in dic.items():
            temp=[]
            for ele in v:
                temp.append((ele,idx_dic[ele]))
            max_idx_num.append( sorted(temp,key=lambda x:x[1])[-1][0])
        new_string = ""
        for jdx,ele in enumerate(string):
            flag=True
            for i,kv in enumerate(dic.items()):
                if int(ele) in kv[1]:
                    new_string+=str(max_idx_num[i])
                    flag=False
                    break
            if flag:
                new_string+=string[jdx]
        print(new_string)
                    
  • 相关阅读:
    tcpdump 抓包
    mysql常用日期函数
    接口自动化测试,一键快速校验接口返回值全部字段
    实训项目
    vue proxyTable 代理方式 解决 跨域pathRewrite
    cookie, session, token 发展史
    Failed to set locale, defaulting to C.UTF-8
    java String与Integer的相互转化
    java LocalDateTime 常用 转换 方法
    Java命令里面的EQ、NE、GT、LT、GE、LE分别代表含义
  • 原文地址:https://www.cnblogs.com/sunupo/p/13561911.html
Copyright © 2011-2022 走看看