hiho一下,第165周 题目1 : 分隔相同字符

来源:互联网 发布:象棋软件排行 编辑:程序博客网 时间:2024/05/29 18:40

题目1 : 分隔相同字符

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个只包含小写字母'a'-'z'的字符串 S ,你需要将 S 中的字符重新排序,使得任意两个相同的字符不连在一起。

如果有多个重排后字符串满足条件,输出字典序最小的一个。

如果不存在满足条件的字符串,输出INVALID。

输入

字符串S。(1 ≤ |S| ≤ 100000)

输出

输出字典序最小的答案或者INVALID。

样例输入
aaabc
样例输出
abaca
#!/usr/bin/env python# -*- coding: utf-8 -*-from collections import defaultdictdef get_string_info(string):Dict = defaultdict(lambda: 0)for i in string:Dict[i] += 1return Dictdef sort_string(Dict):key_list = sorted(Dict.keys())value_list = [Dict[i] for i in key_list]sum_value = sum(value_list)add_index = 0string_list = ['']while True:for index, i in enumerate(value_list):if i * 2 > sum_value:add_index = indexbreakif string_list[-1] != key_list[add_index]:string_list.append(key_list[add_index])value_list[add_index] -= 1if not value_list[add_index]:del key_list[add_index]del value_list[add_index]add_index = 1if not value_list:breaksum_value -= 1if not add_index:add_index = 1else:add_index = 0else:return "INVALID"return ''.join(string_list)def main():    string = raw_input()    Dict = get_string_info(string)    print sort_string(Dict)if __name__ == "__main__":main()






原创粉丝点击