剔除字符串中的某些字母O(N)时间O(1)空间
删除字符串中的某些字母O(N)时间O(1)空间
这个方法是用了hash方法,将要删除的字母先用数组下表表示,如果要删除,则标记为1.不需要删除的标记为0
这个方法在删除元素的时候比较巧妙,它对要删除的字符并不主动删除,而是将空间留在那里,让后面不需要被删除的字符去覆盖。
具体实现如下:
string& f(string& str,const string& deles) { bitset<256> hash; hash.reset(); for (int i=0;i<deles.size();i++) { hash[deles[i]]=1; } int slow=0,fast=0; while(fast<str.size()) { if (hash[str[fast]]==1) { fast++;//跳过表示删除了,准备被后面留下来的字符覆盖 continue; } str[slow++]=str[fast++]; } str.resize(slow); return str; } int main( void ) { string s="They are students."; cout<<s<<endl; cout<<f(s,"aeiou")<<endl; return 0; }