学习笔记之TAOCP--字符串是否包含问题(学习“结构之法”博客)

字符串是否包含问题: 

     str1:"abcdefgh"

     str2:"hgbsc"

 即判断str2是否被str1包含的问题。此问题如果不考虑复杂度的问题, 用最基本的方法即循环搜索的方式即可暴力求解。但其效率相对低下。

     在看“结构之法”的博客中有种将其映射为hashTable的方式能够在访问每个字母一次的情况下给出解答,较高效。

代码如下:

    

int main()
{
	string str1="ABCDEFGHLMNOPQRS";
	string str2="DCGSRQPOM";
	
	int hash[26]={0};
	
	int num=0;
	for(int j=0;j<str2.length();j++)
	{
		int index=str2[j]-'A';
		
		if(hash[index]==0)
		{
			hash[index]=1;
			num++;
		}
	}
	for(int j=0;j<str1.length();j++)
	{
		int index =str1[j]-'A';
		
		if(hash[index]==1)
		{
			hash[index]=0;
			num--;
			if(num==0)
			 break;
		}
	}
	if(num==0)
	cout<<"true"<<endl;
	else if(num>0)
	cout<<"false"<<endl;
	return 0;
	
}

  还有一种基于素数乘法的算法,感觉这思维太活跃了。特记录此贴,以供自己学习。

你可能感兴趣的:(学习笔记之TAOCP--字符串是否包含问题(学习“结构之法”博客))