如何解决c中的超时错误?

时间:2018-08-29 11:59:10

标签: c algorithm

我正在运行此代码来删除字符串的重复项。

   #include <stdio.h>
    #include <string.h>

    int main()
    {
        char str[100];
        int i, j, k;

        printf("\n Please Enter any String :  ");
        scanf("%s",str);

        for(i = 0; i < strlen(str); i++)
        {
            for(j = i + 1; str[j] != '\0'; j++)
            {
                if(str[j] == str[i])  
                {
                    for(k = j; str[k] != '\0'; k++)
                    {
                        str[k] = str[k + 1];
                    }
                }
            }
        }

        printf("\n %s ", str);

        return 0;
    }

运行此程序时,编译器显示超时错误。谁能帮我解决这个错误!

1 个答案:

答案 0 :(得分:0)

有快速的内存有效算法可以解决该问题。

这里是一个,以文本/伪代码描述。内存需求是恒定的,并且仅取决于char中的位数。时间复杂度为O(n)。

Create and initialize an array of flags that keep track of characters encountered.

Loop:
  Read the next character. End loop if there was no more input.

  If the character is flagged in the array then 
    continue.
  Else 
    Flag the character in the array.
    Print the character.
End loop

提示: 在某些系统上,char已签名。确保使用unsigned值来索引数组。