HWOJ 在一个字符中删除第二个字符出现过的所有字符
2014-07-04 12:08
375 查看
HWOJ 在一个字符中删除第二个字符出现过的所有字符
题目:在第一个字符中删除第二个字符出现过的所有字符
实例:
第一个字符:We are students.第二个字符:aeiou. 结果:W r stdnts.
题目分析:
①本题需要完成工作就是查找和删除
②查找字符
我们可以使用先去遍历第一个字符,之后再去第二个字符中去查到到底存在不存在,这样复杂度为O(mn)所以,创建一个用数组实现的简单的哈希表来实现查找,查找最快的就是hash表
②删除字符
后面的字符要往前移,如果每删除一个就移一次,O(n^2)这复杂度实在太高,仅仅用快慢指针就可以搞定,这个方法非常有用,比如求解循环链表。利用快慢指针来删除字符,如果快指针指的是不需要的字符,将值赋给慢指针后,快慢指针同时++;如果快指针指向待删除字符,那么直接++;
③这里还需要注意的输入的字符中又空格,所以我们使用gets,注意需要加头文件#include<string.h>
学习笔记:
①查找字符可以利用哈希表保持目标字符串,之后看看哈希表的键值,我们就可以推断出它出现否,或者出现几次。
②删除字符,我们可以用快慢指针来完成,首先定义这个字符串首地址为slow
fast
*fast指向出现过的字符如果没有出现过,我们只需要将将快指针给慢指针,之后慢指针加1;如果出现过,则我们直接把快指针加1。
============================================================================
参考代码:
//.cpp #include <iostream> #include <string> using namespace std; //删除出现字符串 char DeletingChar(char *str1,char *str2) { //输入不合法 if(str1 == NULL || str2 == NULL) return 0; //创建一个哈希表,并且初始化 const int tableSize = 256; unsigned int hashTable[tableSize]; for(int i = 0;i < tableSize;i++) hashTable[i] = 0; //用哈希表储存第二个字符串 char *pHashKey = str2; while(*pHashKey) { hashTable[*pHashKey] = 1; pHashKey++; } char *slow = str1; char *fast = str1; while(*fast) { if(hashTable[*fast] == 0) { *slow = *fast; slow++; } fast++; } *slow = '\0'; } int main() { char first[1000],second[1000]; gets(first); gets(second); DeletingChar(first, second); cout << first << endl; return 0; }——To_捭阖_youth
相关文章推荐
- sql 语句 写一个函数T-sql函数elimination(a,b)将出现在第一个字符串中的第二个字符串中的所有字符删除,即:select dbo.elimination('abcdefg123
- 哈希表对字符串的高效处理2:在一个字符中删除第二个字符出现过的所有字符
- 剑指Offer----面试题35:扩展----第一个字符串中删除第二个字符串中出现过的所有字符
- 输入两个字符串,从第一个字符串中删除第二个字符串中出现过的所有字符
- 在第一个字符串中删除在第二个字符串中出现的所有字符
- 从第一个字符串中删除在第二个字符串中出现过的所有字符
- 从第一个字符串中删除第二个字符串中出现的所有字符
- 在一个字符串中删除指定的字符 & 删除字符串中所有出现在另一个字符数组中的字符
- [算法] 定义一个函数,删除字符串中所有重复出现的字符。
- 定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个
- 从第一个字符串中删除第二个字符串中出现的所有字符
- 剑指offer相关题目,输入两个字符串,从第一个字符串中删除在第二个字符串中出现的所有字符
- 剑指Offer:从第一个字符串中删除第二个字符串中出现过的所有字符
- 从第一个字符串中删除在第二个字符串中出现过的所有字符
- 定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为”cocoon”,删除重复出现的字符后,其结果是字符串”con”
- HWOJ 删除字符串中出现次数最少的字符
- HWOJ 删除字符串中重复出现的字符
- 从第一字符串中删除第二个字符串中所有的字符
- 传入一个字符串,如何获得这个字符串中所有字符出现的个数
- HWOJ 在一个字符串中找到第一个只出现一次字符