字典应用之函数调用【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