例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。
关于删除字符,后面的字符要往前移,如果每删除一个就移一次,O(n^2)这复杂度有点太高,仅仅用快慢指针就可以搞定,这个方法非常有用,比如求解循环链表。
初始化:快慢指针指向第一个字符
循环:如果快指针指的是不需要的字符,将值赋给慢指针后,快慢指针同时++;如果快指针指向待删除字符,那么直接++;
终止:快指针指向'\0'
bool is_delete_char(char temp) { char delete_c[5] ={'a','e','i','o','u'}; for(int i =0;i<5;i++) if(delete_c[i] == temp) return true; return false; } char * delete_special_char(char *s) { if(s == NULL) return NULL; cout<<"before:"<<s<<endl; int slow_index =0; //快慢指针 int fast_index =0; for (;s[fast_index]!=0;fast_index++) { if(!is_delete_char(s[fast_index])) s[slow_index++] = s[fast_index]; } s[slow_index] =0; //end string Don't forget cout<<"after:"<<s<<endl; return s; }