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

问题描述 投票:0回答:1

有一次我被邀请参加初级 Java 开发人员角色的面试。一切正常,直到技术面试... 这是一个实时代码挑战,技术负责人会看着我用 Java 解决代码挑战。

一年前的事了,到现在都不知道怎么解决... 从那时起我就开始学习Python,甚至尝试用这门语言解决它,但是,没有结果......

挑战是这样的:

根据用户输入的字符串,编写一个函数,返回您应该添加多少个字符,以便字符串“均匀”分布。

例一:

输入是“abba”。这个字符串有 3 组: 第一:“一个” 第二个:“bb” 第三个:“一个”

所以为了“均匀地”平衡这个字符串,我们应该做以下事情: 在第一组中,我们应该添加一个字符“a” 在第二组中,我们什么都不应该做。 在第三组中,我们应该添加1个字符“a”

所以,这样做,字符串将是这样的: “aabbaa” 而且,函数的返回值将是“2”

例二:

输入是“baaababba”。这个字符串有 6 组: 第一:“b” 第二个:“aaa” 第三个:“乙” 第四:“一个” 第五:“bb” 第六:“一个”

所以为了“均匀地”平衡这个字符串,我们应该做以下事情: 在第一组中,我们应该添加2个字符“b” 在第二组中,我们什么都不应该做。 在第三组中,我们应该添加2个字符“b” 在第四组中,我们应该添加2个字符“a” 在第五组中,我们应该添加1个字符“b” 在第六组中,我们应该添加2个字符“a”

所以,这样做,字符串将是这样的: “bbbaaabbbaaabbbaaa” 而且,函数的返回值将是“9”

例三:

输入是“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)

python java string character
1个回答
0
投票

本质上,这个问题需要找到相同字符的所有连续序列。然后,我们只需要将每个组的长度与最大组的长度之差求和即可。

在 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)
© www.soinside.com 2019 - 2024. All rights reserved.