3.去除字符串中重复的字符
O(n^2)的解决方式:
只能用额外的两个变量,可以依次的访问数组的每个元素,每访问一个,就将从当前到末尾的重复字符(置换为 ' ')
核心代码:
1 void removeChar(char s[]) 2 { 3 int len = strlen(s); 4 if(len < 2) return; 5 int p = 0; 6 int i = 0,j = 0; 7 for(i = 0;i < len; ++i) 8 { 9 if(s[i] != '') 10 { 11 s[p++] = s[i]; 12 for(j = i+1;j < len; ++j) 13 if(s[j] == s[i]) 14 s[j] = ''; 15 } 16 } 17 s[p] = ''; 18 }
O(n)的解决方式:
需要开辟额外的数组,用来记录字符出现的次数
核心代码:
1 void removeChar(char s[]) 2 { 3 int len = strlen(s); 4 if(len < 2) return; 5 bool c[256]; 6 memset(c,0,sizeof(c)); 7 int p = 0; 8 int i = 0; 9 for(i = 0;i < len; ++i) 10 { 11 if(!c[s[i]]) 12 { 13 s[p++] = s[i]; 14 c[s[i]] = true; 15 } 16 } 17 s[p] = ''; 18 }