题目出处 http://acm.hdu.edu.cn/showproblem.php?pid=1381
此题典型的键值对计数,使用Map容器即可。
map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。
STL的map的底层实现是红黑树,STL的红黑树实现中维护了一个node_count之类的簿记变量,用以计算节点数。
1 #include <iostream> 2 #include <map> 3 #include <string> 4 using namespace std; 5 map<string, int> MC; 6 int main() 7 { 8 int T,N, NC; 9 string test; 10 cin>>T; 11 while( T--) 12 { 13 cin>>N>>NC>>test; 14 MC.clear(); 15 const int length = test.size(); // 记录输入字符串长度 16 for(int i=0;i<length-N+1;i++) 17 { 18 string tmp(test,i,N); //截取子串 19 if(MC.count(tmp)==0) ++MC[tmp]; //将key(tmp)所对应的值增加计数 20 } 21 cout<<MC.size()<<endl; // 输出map中不重复的键的个数,也就是map的size 22 } 23 return 0; 24 }