方法1:从头到尾扫描字符串中的字符,每访问一个字符,就将该字符到尾部之间的重复元素删除(可以设置为‘\0’),时间复杂度N^2。
方法2:开辟一个长度为256的bool数组,标记字符的出现。扫描一遍即可,限行时间复杂度N。
C++实现
void remove_repeat1(char s[])
{
bool flag[256];
memset(flag,0,sizeof(flag));
int len = strlen(s);
for(int i=0;i<len;i++)
{
if(flag[s[i]]==0)
{
flag[s[i]] = 1;
}
else
{
s[i] = '\0';
}
}
//显示新数组
for(int i=0;i<len;i++)
{
cout<<s[i];
}
cout<<endl;
}
void remove_repeat2(const string &ss, string &result)
{
bool flag[256];
memset(flag,0,sizeof(flag));
int len = ss.length();
for(int i=0;i<len;i++)
{
if(flag[ss[i]]==0)
{
flag[ss[i]] = 1;
result +=ss[i];
}
else ;
}
}
Python实现
def remove_repeat(ss):
flag = [0]*256
result = []
length = len(ss)
for i in range(0,length):
if flag[ord(ss[i])] ==0:
flag[ord(ss[i])] = 1
result.append(ss[i])
else:
pass
print(result)