假设须要推断多个字符是不是在某个字符串里面出现过或者统计多个字符在某个字符串中出现的次数,我们能够考虑基于数组创建一个简单的hash表,这样能够用非常小的空间消耗来换取时间效率的提升。
题目1:从第一个字符串中删除第二个字符串中出现的全部字符
思路:准备一个hash数组。遍历第二个串,并以每一个字符所相应的asc码作为下标,值为是否出现,1代表出现。然后遍历第一个串。每遍历一个字符,就查询hash表(O(1)),若值为1。那么删除该字符。
/* 从第一个字符串中删除第二个字符串中出现的全部字符 by Rowandjj 2014/8/18 */ #include<iostream> #include<string.h> using namespace std; #define MAX_SIZE 256 //在串1中删除全部出如今串2中的字符 void DeleteChar(char *str1,char *str2) { if(str1 == NULL || str2 == NULL) { return; } char table[MAX_SIZE];//准备一个哈希数组 int i,j; for(i = 0; i < MAX_SIZE; i++)//初始化哈希数组 { table[i] = 0; } for(i = 0; *(str2+i)!='