33,009
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct node
{
node *next[26]; //这里假设单词都是26小写字母组成
int cnt;
node () : cnt(0)
{
memset(next,0,sizeof(next));
}
};
node *root;
vector<node*> de; //记录待delete的指针
void insert_str(const char *str)
{
node *p=root;
int i=0,j;
while (str[i])
{
j=str[i]-'a';
if (p->next[j]==0)
{
p->next[j]=new node;
de.push_back(p->next[j]);
}
p=p->next[j];
i++;
}
p->cnt++; //记录单词出现的次数
}
int find(const char *str)
{
node *p=root;
int i=0,j;
while (str[i])
{
j=str[i]-'a';
if (p->next[j]==0)
return 0;
p=p->next[j];
i++;
}
if (p->cnt==0)
return 0;
else
p->cnt--;
return 1;
}
void release()
{
size_t i;
for (i=0;i<de.size();++i)
delete de[i];
}
int main()
{
vector<string> paper(3);
paper[0]="abc";
paper[1]="cde";
paper[2]="def";
vector<string> letter(1);
letter[0]="cde";
size_t i;
//这里可以做一些预处理
//下面针对查找的情况
root=new node;
de.push_back(root);
for (i=0;i<paper.size();++i)
insert_str(paper[i].c_str());
for (i=0;i<letter.size();++i)
if (find(letter[i].c_str())==0)
{
printf("failed!\n");
break;
}
if (i==letter.size())
printf("succeed!\n");
}
#include <string>
#include <iostream>
#include <vector>
#include <set>
using namespace std;
bool IsLetterInPaper(vector<string> paper,vector<string> letter)
{
set<string> set_string;
for(vector<string>::iterator vc_it = paper.begin();vc_it != paper.end();vc_it ++)
{
set_string.insert(*vc_it);
}
for(vector<string>::iterator lt_it = letter.begin();lt_it != letter.end();lt_it ++)
{
if(set_string.insert(*lt_it).second)
return false;
}
return true;
}
int main(int argc, char* argv[])
{
string p[4] = {"I","love","swimming","hate"};
string l[3] = {"I","love","swimming"};
vector<string> paper(p,p + 4);
vector<string> letter(l,l+3);
if(IsLetterInPaper(paper,letter))
cout << "in paper";
else
cout <<"not in paper";
cout <<endl;
while(1);
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
using namespace std ;
vector<string> paper ; //已经初始化好了的
vector<string> letter ; //同上
map<string,int> result ;
int main()
{
bool flag = true ;
vector<string>::iterator p = paper.begin() , l = letter.begin() ;
while (p!=paper.end()) ++result[*p++] ;
while (l!=paper.end())
{
if (result[*l++]<1) { flag = false ; break ; } //就是说paper里没有这个词
}
if (flag) cout<<"可以"<<endl ;
else cout<<"不可以"<<endl ;
return 0 ;
}
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std ;
vector<string> paper ; //已经初始化好了的
vector<string> letter ; //同上
int main()
{
sort(paper.begin(),paper.end()) ;
sort(letter.begin(),letter.end()) ;
vector<string>::iterator p = paper.begin() , l = letter.begin() ;
bool flag = true ; //标志位
while (l!=letter.end())
{
if (*p<*l) ++p ; //不匹配paper指针++
if (*p==*l) { ++p ; ++ l ; } //匹配,两个指针都加
if (*p>*l) { flag = false ; break ; } //没有找到与*l匹配的字符,所以不能实现所需
}
if (flag) cout<<"可以"<<endl ;
else cout<<"不可以"<<endl ;
return 0 ;
}