本次竞赛虽然进步了,但是也很可惜——第3题没有在规定时间内做完,所以最终得分只算了2题,不过毕竟有半年没打了,前面的题平均20min还是用时太长了(我做完一题时大佬们早就结束比赛了),过程中也总是查C++API文档,说明自己还是不熟练,所以以后得好好研究下C++STL模板库。
class Solution {
public:
vector<string> stringMatching(vector<string>& words) {
vector<string> ret;
int flag;
for(int i=0;i<words.size();i++){
flag=0;
for(int j=0;j<words.size()&&!flag;j++){
if(words[i]!=words[j]&&words[i].length()<words[j].length()){
if(words[j].find(words[i],0)!=string::npos){
ret.push_back(words[i]);
flag=1;
}
}
}
}
return ret;
}
};
class Solution {
public:
int find(vector<int> v,int key){
for(int i=0;i<v.size();i++){
if(v[i]==key){
return i;
}
}
return -1;
}
vector<int> processQueries(vector<int>& queries, int m) {
vector<int> ret,v(m);
for(int i=0;i<m;i++){
v[i]=i+1;//P
}
for(int i=0;i<queries.size();i++){
int tmp=queries[i];
int pos=find(v,tmp);
ret.push_back(pos);
v.erase(v.begin()+pos);
v.insert(v.begin(),tmp);
}
return ret;
}
};
用map存储符号的映射,使用字符串的模板函数replace()、substr()等等进行过程模拟即可。
class Solution {
public:
map<string, string> m;
void init(){
m["""]="\"";
m["&"]="&";
m["'"]="\'";
m[">"]=">";
m["<"]="<";
m["⁄"]="/";
}
string entityParser(string text) {
init();
int i=0;
int size=text.length();
string ret=text;
string str;
int sum=0;
while(i<size){
if(text[i]=='&'){
int start,end;
start=i;
do{
i++;
}while(i<size&&text[i]!=';');
if(i<size){
end=i;
string s=text.substr(start,end-start+1);
if(m.find(s)!=m.end()){
str=m[s];
ret.replace(start-sum,s.length(),str,0,str.length());
sum+=s.length()-1;
}
}
}
i++;
}
return ret;
}
};