过滤掉字符串列表

时间:2014-10-23 20:31:18

标签: c string

给出一个字符串列表,例如[boo,koo,kool]

您尝试过滤掉所有字符串中出现的字符,并进一步过滤掉出现次数相同的字符,因此在上述情况下,您将返回oo

在我的方法中,我考虑首先为第一个字符串中的所有唯一字母创建一个结构,并保留它们的计数,然后与其他每个字符串进行比较。我认为就运行时间而言可能是一种过度杀伤力。任何人都可以建议更好的方法吗?

2 个答案:

答案 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

}

我把它作为伪代码留下了,因为它听起来像是家庭作业,希望这能让你开始