/*******************************************************
Design an algorithm and write code to remove the duplicate characters in a string
without using any additional buffer.
NOTE: One or two additional variables are fine
An extra copy of the array is not.
FOLLOW UP
Write the test cases for this method.
Note: This method takes O(1) space, O(n^2) time.
And this version does not change the order.
Mod Time: 4.19, 2012
Copyright: Ben
*******************************************************/
#include<stdio.h>
#include<stdlib.h>
#define STRING_MAX_LEN 10000
int main(void)
{
char s[STRING_MAX_LEN];
char ch;
int StLen = 0, i, j, k;
freopen("String.txt", "r", stdin);
while((ch = fgetc(stdin)) != EOF)
{
s[StLen++] = ch;
}
s[StLen] = '\0'; //whole string is read.
printf("%s\n", s);
fclose(stdin);
//scan & eliminate duplicate characters.
for(i = 1; i < StLen; i++) //for every scanned char.
{
for(j = 0; j < i; j++)
{
if(s[i] == s[j]) //s[i] already exist, in index j.
{
//swap(s + i, s + StLen - 1);
for(k = i; k < StLen; k++)
{
s[k] = s[k + 1];
}
--StLen;
--i; //the new s[i], which is originally s[StLen -1] should be examined.
break;
}
}
}
s[StLen] = '\0';
printf("%s\n", s);
return 0;
}
Design an algorithm and write code to remove the duplicate characters in a string
without using any additional buffer.
NOTE: One or two additional variables are fine
An extra copy of the array is not.
FOLLOW UP
Write the test cases for this method.
Note: This method takes O(1) space, O(n^2) time.
And this version does not change the order.
Mod Time: 4.19, 2012
Copyright: Ben
*******************************************************/
#include<stdio.h>
#include<stdlib.h>
#define STRING_MAX_LEN 10000
int main(void)
{
char s[STRING_MAX_LEN];
char ch;
int StLen = 0, i, j, k;
freopen("String.txt", "r", stdin);
while((ch = fgetc(stdin)) != EOF)
{
s[StLen++] = ch;
}
s[StLen] = '\0'; //whole string is read.
printf("%s\n", s);
fclose(stdin);
//scan & eliminate duplicate characters.
for(i = 1; i < StLen; i++) //for every scanned char.
{
for(j = 0; j < i; j++)
{
if(s[i] == s[j]) //s[i] already exist, in index j.
{
//swap(s + i, s + StLen - 1);
for(k = i; k < StLen; k++)
{
s[k] = s[k + 1];
}
--StLen;
--i; //the new s[i], which is originally s[StLen -1] should be examined.
break;
}
}
}
s[StLen] = '\0';
printf("%s\n", s);
return 0;
}