生活小妙招
通过set和substr函数,方便快捷地写出匹配已有字符串的代码
前置芝士:set使用详解
题目:G. Perfect Word
代码实现
//通过set + string的substr的使用快速匹配已有字符串
#include<bits/stdc++.h>
#define ll long long
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
string s[100005];
set<string>S;
int n;
bool cmp(const string& a, const string& b){
return a.size()<b.size();
}
void solve(){
cin>>n;
int ans=0;
rep(i,1,n){
cin>>s[i];
}
sort(s+1,s+n+1,cmp);
rep(i,1,n){
if(s[i].size()==1 || ( (S.count(s[i].substr(0,s[i].size()-1))) && (S.count(s[i].substr(1))) )){
S.insert(s[i]);
ans = max(ans, (int)s[i].size());
}
}
cout<<ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}
代码中的字符串匹配技巧
第20行条件中(S.count(s[i].substr(0,s[i].size()-1))
S是一个set,储存之前遇到过的一系列字符串,同时也有去掉重复字符串的功能,而set的count()方法功能为:如果S中有括号中的字符串,就返回1,否则返回0。
再看count括号中的s[i].substr(0,s[i].size()-1)部分,string的substr有提取子串的功能,具体用法为:.substr(起始下标, 从起始下标开始所需提取的长度)。
所以,上述彩色代码所描述的是,在S中查找是否具有“s[i]的前n-1个元素所构成的子串”
(给初学者的说明:s[i]是一个字符串,这里看不懂的去看string的基础用法)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)