思路
这道题有多种解法,但我在这里练习优先队列,就用优先队列做了。
首先要字典序输出,那就以小根堆压入数据。然后每一个弹出前检查一下,前头是否等于k字符串,如果是就输出。
犯的错误
q.pop()
放到if语句里面了,造成一个隐蔽错误,这样只会再前头是k串才弹一个,当遇到一个小的不是k的串,最小值无法弹出了,检查30分钟才发现,晕。
错误代码
while(!q.empty()){
if(q.top().find(t)==0){
cout<<q.top()<<endl;//顺手把q.pop()放这里面了,造成小串无法弹出。
q.pop();//放里面就错误了
}
}
代码
#include <iostream>
#include <queue>
using namespace std;
const int N=1e5+10;
int n;
string t;
priority_queue<string,vector<string>,greater<string> >q;
int main(){
cin>>n;
for(int i=0;i<n;i++){
string s;
cin>>s;
q.push(s);
}
cin>>t;
while(!q.empty()){
if(q.top().find(t)==0){
cout<<q.top()<<endl;//顺手把q.pop()放这里面了,造成小串无法弹出。
}
q.pop();//不管是不是,每个都要弹出去
}
return 0;
}