有一次我被邀请参加一个初级Java开发人员的面试。一切都很好,直到技术面试......这是一个现场代码挑战,技术负责人会看着我用Java解决代码挑战。
大约一年前,直到现在,我不知道如何解决它......从那时起,我一直在学习Python,甚至试图用这种语言解决它,但是,没有结果......
挑战在于:
根据用户输入的字符串,编写一个函数,返回应该添加多少个字符,以便字符串“均匀”分布。
示例1:
输入是“abba”。这个字符串有3组:第一个:a第二个:“bb”第三:“一个”
因此,为了“均匀地”平衡这个字符串,我们应该执行以下操作:在第一组中,我们应该添加一个字符“a”在第二组中,我们应该什么都不做在第三组中,我们应该添加一个字符“a”
所以,这样做,字符串会像这样:“aabbaa”并且,函数的返回值将是“2”
示例2:
输入是“baaababba”。这个字符串有6组:第一个:“B”第二个:“aaa”第三:“B”第四:“a”第五:“bb”第六:“一个”
因此,为了“均匀地”平衡这个字符串,我们应该执行以下操作:在第一组中,我们应该加两个字符“B”。在第二组中,我们什么也不做。在第三组中,我们应该加两个字符“b”。在第四组中,我们应该加两个字符“a”。在第五组中,我们应该加一个字符“b”。在第六组中,我们应该加两个字符“a”。
所以,这样做,字符串会像这样:“bbbaaabbbaaabbbaaa”并且,函数的返回值将是“9”
示例3:
输入为“aaaa”。此字符串有1个组:“aaaa”
所以,甚至不需要向这个字符串添加字符,返回值应该是“0”
例四:
输入是“aabbaabb”。这个字符串有4组:第一组:“aa”第二组:“bb”第三组:“aa”第四组:“bb”
不需要添加任何字符来平衡这个字符串,因为所有的组都有相同的字符数量。对于这个字符串,返回值也应该是“0”。
如果你能在Java或Python方面帮助我,我将非常感激。从那时起,这个挑战就快把我逼疯了。
顺便说一句...我是新的世界编程...所以,是善良的哈哈哈
def string_evaluator(user_input):
input_to_list = []
list_to_dic = {}
group_count = 1
biggest_group = 1
for i in user_input:
input_to_list.append(i)
for char in input_to_list:
character = char[0]
if character not in list_to_dic:
list_to_dic[character] = []
list_to_dic[character].append(char)
# print(list_to_dic)
2条答案
按热度按时间yptwkmov1#
从本质上讲,这个问题需要找到所有相同字符的连续序列。然后,我们只需要将每个组的长度与最大组的长度之差求和。
在Python中,我们可以使用
itertools.groupby
来获取相同字符的所有连续运行。一个简单的实现如下:gr8qqesn2#
@ unimmediate的答案绝对是最好的答案。
如果你不知道
itertools.groupby
,那么你应该搜索StackOverflow和其他来源的“游程编码”。这给出了计算连续相同数字数量的其他技术。