字典应用之函数调用【python】

字典应用之函数调用【python】

题目要求:

由a、b、c三个字母组成的任意长度字符串,如果相邻的两个字符是不同的,就用另一个替换,如:

abc->cc或aa

将任意长度的这种字符串进行缩减,直到不能缩减后,最后输出一个整数表示字符串长度。

启初我是使用最简单粗暴的方式

re.sub(r'ab|ba','c',s)
re.sub(r'ac|ca','b',s)
re.sub(r'bc|cb','a',s)

但是这种方式不行,因为这种整体的变换会导致不均匀的减少,比如字符串中的a比较多,但是经过缩减后并没有主动的减少a的数量,反而让b和c减少的更多了。最后本来可以全都消减掉的a全都剩下了。(PS:这是我对这题的理解,但是我感觉其中应该有某种数学规律,可以使用这种数学规律去减少字符,而我使用的方法是一种笨拙的方式完成的。)

def stringReduction(s):
    # select_replace_chr是用于选择替换字符的字典,每个key都对应一个lambda表达式
    select_replace_chr={
        'a_num':lambda s:re.sub(r'bc|cb','a',s,1),
        'b_num':lambda s:re.sub(r'ac|ca','b',s,1),
        'c_num':lambda s:re.sub(r'ab|ba','c',s,1)
    }

#count_num这个字典是用于存储字符串中每个字符的数量
    count_num={
        'a_num':0,
        'b_num':0,
        'c_num':0
    }
    while (True):
        count_num['a_num'] = s.count('a')
        count_num['b_num'] = s.count('b')
        count_num['c_num'] = s.count('c')
#对字典中的元素进行升序排序,再存入字典中。这样第一个元素就是最少的元素。
        count_num=dict(sorted(count_num.items(),key=lambda x:x[1]))
        ss = s
#将前两个较少的字符替换字符串中较多的字符。写两句的原因是"bbca"和'bbac'这种情况。a和c都是最少的元素,如果用a来替换,但字符串的实际情况是"bbac",程序将不能进行替换,所以我使用了比较笨拙的方式,替换两个较少字符。
#函数的调用已经用颜色分开了,因为我在调用的时候就忘了把参数s添加上了。导致运行时总是提示没有属性。
        s = select_replace_chr[list(count_num.keys())[0]](s)
        s = select_replace_chr[list(count_num.keys())[1]](s)

        if (ss == s):
            break
    print(s)
    return len(s)

这里有一部分测试数据:

babcbbaabcbcbcbaabbccaacccbbbcaaacabbbbaaaccbcccacbbccaccbbaacaccbabcaaaacaccacbaacc
accbaacabbbaacabcbcaccaabcbccbacbcbaabacacababcaacbcccbaccacaabcbaaccbcabccbccbcbbcba
ccaacbabbccbcca
cbcbabccaaaacbbbcccbbb
aaacacaacccbcbacccbacacbaabcc
acabcbbcbabbabcacbaaccb
ccaacaaccabccacabbcbabccbaabacbcccabcaaabaabaccbbaaccacaababbcbacbbcccaccababbccbac
accbacbbcccccaccaababcbccacabbbcbbbcbcbbcaabbbccbaaabbaaaaabcabbcaabacacaaccbbbaccbaacbbcaaba
aaccbccbccabbcc
acccabcccbcaaacbacbcbabbccacb
ccaabacaacccaaaacaaaacacaabbcccaccbbaaabcababcbaacbbbcbabccaacbaccccaabbbbbcaabbcabcacabcccab
aabaaabc
caacbbaabbbbcbbbbbabaccbcaccbcbbabccacc
bbbbaacbcbaaaabaabcaaacbab
acbcbacaacaccbacabbacabcbccacbbaacacaccaccaccacccbabcbcabcabaccbcaacaaabaabcbacacacbcbcbaaabaccaaaac
baccbcabacbbccaabcbaacaaabbacacbbcaacbbcbaaaacaabcabcbbccaacbaaaabaaacacaccabbbaabcacbacabcbbcccb
abcbaaaaccbaccccacbabbbaabaabbbcabababbcbaacaabbaabbcbaaabbbaaabcacacccbaaab
ccbacacabaaaacbaacaacabcaaabbbcacabbbcbaccaacbbcbccbabbabcccbbbaccbbbaccacccbbbabcccaacaa
acbbccccbacacbcaabbcbccbcccaaaabccaabcccbccbacbcaacc
bbabbaccbbcabaccccaccbbcbabbabcbaaccbbcc
bbcbacbacbabcacabbaaccbccacbcccbaccbbbcbacaaaacccaababcacbbcbbacabbccbbcbcbc
accacbabaaacaaabbaaacacbcaccbacc
cccabbbcbaaacaccaccabbacbabbcabcbaacbccbabccbbabacccbbcbbaccbccaacaaccbaabcbccacabcbcbcaaaaccccaccac
ccbaccccbcccccbbccbaabaaabcabaabcbbcbccabccbcbacbcccbaccbabcabbcaa
cccabccbcbbbabbcabcbaccbcbcabcaacaaccaacccbcaac
cbabcacbbbcccaacbcbcabbcaaccbbcaaabcabcbacbaaccbbbabaabbaabbcacaaccaaccbcb
cbcbaaacaabcbbaacaccbcccbabccacccbaabbacbbaabaaacbabaabbacccbbcbabccccbcbbcaaababbbcccbaabacaaaabcc
cbabaabbaccbbaacbcacbabbbbbabacbccaacbcacbcbcbbaabcaabbbababccaccbcaacacbacbbaccaaaabcccb
baccacaaabbbbcbbaacabcbcaccccacbbbbcbccbbaacbcbbbb
abacbbcaaaacbabbbbcbcaccbcbaaaabbccabccccccccbacccacaccbbbcabbcbabbca
babbabcaacabcbaccaaabcbaacaabbbcb
bcabaabbcacaacbacc
bbbabccccccabbaacbcabbcbbcbacabbcabbabbabbaaacaabba
cbbaaaacbbabcaaaccbaacbbbcbcaaccbcabcbbbaaaaabbcacaabcb
bbbcbcbcccbcbcbcaccabaababcbabaccccbbaaaaccccbbababcbcabcaaccbcbbbacababbcabcbb
cabaaccaacccbabccbccbcacaabacabbbcbcabcaccaaabbabbacbbcccacaabbcbbbccbcbccacaccbaabbcabcbbc
acccacbabacaaaabcaacbccaaabbaaba
ccacababbbbcccbcabbaacbcacaccaccabbaacccaabcacacbcca
aaaaacaacaabbbbbaacbcaccbbbabbbcbbabbbcccaabbaacb
abbcbccccabbaabbccabccbbcacccaaacbabbabaaaabbba
bbabbacaabbbcbbcbcbacacbaccaaabbcccacccbbacbcbbbbacbabccaccaabccacaacc
bacaaabcccbbcaabaabbbcbbabcbbbbccaaabccbbbaccbaaaacbcbaaacc
bbcbbabbacccbababcaccbbaacbbccbaaaacbbbcaacbbacaaaabcbbabacacababbabbbbccacbbbbccbaaacabacccaba
abcbabbabbbaaaacbbacbabbabbbaaaabaacccabacaacbabcbaaca
bbbcbbaca
aacc
bcabaaabbaacbccbbbababcacbb
aaccbcbcccaaababcacacaccbcbcacaccccbcabbcccab
caccaaaaacabbaababbccaaacabcbcbbcbaababcbbaaabcaa
accbbbccbbbccbbbcacbcacbbacbbccccbbaababaccaabbbbbcbbcaaaabca
ccabbacbacccaaacbbaaaaaaabaabacabcccabbacacabaccbababcabaccbabcbbbacaaacacccaa
baacccbbaabcacccbbaabaabcabbabaacbcbbb
cbccabbabcabcccbbccabccbcabcaaacccacbbacccbbbbcabcaaccccbbbbcbbcbcacbaabccabaccc
aacacbbbaabbabccbcbbaccccbacbbcbbcbbbbabcbccc
abcbbacaacbcccacbbcbcaaabccaacaabacabbacbcbbabacacaccbbbbabcaccccccbb
bababbbcabccbbaccc
bbcbbcbbc
aababbc
abbcabccccccbbbaabcbaccbabbbbbcbcacabbabacacbacbcaaaacbaccaaaccaabbcabacb
bccbbccbcccabbabbbaacaaacabccacbacabbcabccb
bcbcacbcabaaccaccabaabbbbaaaaccccababaa
bbcbbabbaccabbacbaacacbcbaacbbaacacbabacaccbacbcaccbbbbcbbcaabbbbbcaaccbbbbaccaabc
babbcababcccbbcbbaabcaccabcabcaccbbabcbacbaccaacacaaacabacccacbabaababbbcaaaabcbbabcccaaabaabca
acccaaababcbabaacaabaccaaabbaccbbbacabbbcabbcbcbccabbab
aaabaaaccacccbaccbbcbabbacccacbbacaacbacbcbbbccbbaaccccabbcbabaaabbbcbabccaaca
bbccacbababbbcccbaccaacbaccbccacbbbcaabcacacbcac
ccaaaabcccaaaccbbccbacbcaccaccbbaabaacaacbbaaacbbcabbccbbccacbccbaccabcaccabaaabababbaaacbbbaabc
bbb
bccaaacbaabcacaabaaabcabbcacbbaabcccababbcbacbbbacbbcbbabbcaaccccbbaacccbbccacaabcabbcbbabcbcb
bacabaabbbbbcacbcccabbcccbaaacccacaccaacccaaaabacabbbbbaabbabaacbbbacca
cbac
bacccaabbbbacccbabcccacccabbacabccbcabacacaabababbcbacbccabacbcabacbcbbca
aaccbbcaaabcabcbcacbabcabbbacaacbacccbcccbbcabaacbbacbbbaacabaacacbcccbbaabbabbc
abaccbaabacbaccabbaa
bbccaacbaccbccbcccaaccaccbbabbcacaaaaacbaccabbaccccbbabbaccb
ccbabbabbccbcbacccbbcaabcbbbbcab
cbbbbaabbcbccbbacbcabacabcbcccccbbacbbccabcbccbcabcccccbcbbcbbbccbacaccbaacccabaabccbaba
bcacbaabaaccaaaabcacbacbbccbbaacabcaccbaaabbbbbccacbbbccbc
aacabaabcbaabbccaacaccacbcbbbbacbcabaacabbbacaaaccbccbbcbabacbccbcacbaacbcababbcbacccabbbcccabb
cbbaba
bcbacccaaaccaabbaabccbbbacbbbbbabcabcacaababaaabacbaacabcbc
abbcbcbacbbaaabaaacbcaccacacbaacbccabaccbbacbaacaaccbbccbacaacacccacccccbcbbccaaaca
bccacbaacaacabcabbcccbacacabcabcabcaabccccaabcbcbb
acacaaaccbbccacabbcbabbacbcca
cbaabcacbabbaabaaabbcbcbaaacaaaccaabcbbcc
babaabbbabaacabaacbaabbaaccccccbcabccababbbbcabaccbcbcbbcabccaacacbacabbbcaaccabcccbcaa
accacccbcbccbabaccccbabaaaccaacbabccbcbbaaaca
aabcccabbabaaaaacabcbabccabacbbaacacabbbbb
cbacabbaaacbaccacbbbbcbccaabcbacaaccaacabccbcbccabbcacbababbccabacaaaacaabbcaacbaaaabaccaa
ccbaabbbccacaabaacbccbabaaacababcbcacbbcbabcaccbaaacabbaccbabbcaacaabcacaccac
ccaaaaccbbcccbccbabcaacbcabcbbabbbcccbbcabbacbabbbbabbcbcaab
baabaaaccaaacbbbbcaabbcaababcbabcbcccbcbbcabbbaabbacaaaabacaccccbbcbabaccbbacbccaccababcbaab
aaacabacaabbbccbbbccbaabbcaaacbbacbaccaccbbbcbaaaaccbaaaab
bbcacccabbbbbacaabbbbcbaaccbabacacacccbbacabababacacbcaccaaacaaabacbabbbbbbcab
aababbbbbbcbaabacabbbaccccacccaaccbbaccbaabbbaaaaccbcccccabcabacbbcaacbbca
abbbbbbbbbabaaccacbbacaaaaabaacacbababaccaba
aaaabccbaacabaacbcbacabbabbbcbbabbcbababbcbaaaacacaabcbcbcbbbccabbbccbacbcaccbbcb
a
bbccbbbcbbbcccbaccaabaaccccabaabcabccacabaaabcaabababccabccaacbcaabcbbacbacacbaacabccbaba
cacbaccccabcaaaabcbcacccbbbcabcacbcaccababcaaabcaabbabbcacbcbaabccccccbc

如果有更优的算法,给我邮件:qowoq@msn.com

Comments are closed.