如何用Python/Java计算和比较字符串中的字符

sxpgvts3  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(117)

有一次我被邀请参加一个初级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)
yptwkmov

yptwkmov1#

从本质上讲,这个问题需要找到所有相同字符的连续序列。然后,我们只需要将每个组的长度与最大组的长度之差求和。
在Python中,我们可以使用itertools.groupby来获取相同字符的所有连续运行。一个简单的实现如下:

from itertools import groupby
def balance(s):
    groups = [len(list(g)) for k, g in groupby(s)]
    maxLen = max(groups)
    return sum(maxLen - x for x in groups)
gr8qqesn

gr8qqesn2#

@ unimmediate的答案绝对是最好的答案。
如果你不知道itertools.groupby,那么你应该搜索StackOverflow和其他来源的“游程编码”。这给出了计算连续相同数字数量的其他技术。

相关问题