给出一个字符串列表,例如[boo,koo,kool]
您尝试过滤掉所有字符串中出现的字符,并进一步过滤掉出现次数相同的字符,因此在上述情况下,您将返回oo
在我的方法中,我考虑首先为第一个字符串中的所有唯一字母创建一个结构,并保留它们的计数,然后与其他每个字符串进行比较。我认为就运行时间而言可能是一种过度杀伤力。任何人都可以建议更好的方法吗?
答案 0 :(得分:0)
您可以使用TRIES
解决此问题。相关内容:here
例如,考虑您的给定方案:
+1 +2
b k
\ |
\ |
o +3 ----|
| | ==> this has contiguous max frequency.
o +3 ----|
|
l +1
由于您的数组只有三个字符串,并且连续字符串数为3.因此答案为oo
答案 1 :(得分:0)
你已经有了一个可以使用的结构,它的类型是' char'其中存储-128到128个值。也许每个单词的一个int数组都可以解决问题,你可以使用在字符串中找到的char来索引数组。
#define NUMWORDS 10 // assuming 10 words in list
int CountOfChars[NUMWORDS][256];
for each string n in list
{
for each char c in string n
{
CountOfChars[n][c]++;
}
}
然后分析每个CountOfChars数组以找到计数> = 2 你可以使用这样的循环:
char SetFlag;
for each char c in the system // a - z, A - Z
{
SetFlag = 0;
if (CountOfChars[0][c]>1)
{
for each string n in list except the first word
{
if (CountOfChars[n][c]>1)
SetFlag = c;
else
SetFlag = 0;
}
}
if (SetFlag)
printf("%c",SetFlag); // prints a char found twice in all words
}
我把它作为伪代码留下了,因为它听起来像是家庭作业,希望这能让你开始