字符串处理专题,很早就写好了然而忘记写blog了

1035

题意:给你一些单词作为字典。然后让你查找一些单词。对于每个单词,如果在字典中就输出它。否则输出所有它通过删除||增加||替换一个字符能得到的单词

由于数据范围很小,所以我们直接暴力跑一下即可

CODE

#include<string>
#include<iostream>
#include<map>
using namespace std;
const int N=10005;
map <string,bool> hash;
string s[N],t;
int n,m;
inline void swap(string &a,string &b)
{
string temp=a; a=b; b=temp;
}
inline bool cmp(string a,string b)
{
int len_a=a.size(),len_b=b.size();
if (len_a<len_b) swap(a,b),len_a=a.size(),len_b=b.size();
if (len_a-len_b>1) return 0;
if (len_a^len_b)
{
for (register int i=0;i<len_a;++i)
{
string temp=a;
temp.erase(i,1);
if (temp==b) return 1;
}
return 0;
} else
{
int tot=0;
for (register int i=0;i<len_a;++i)
{
if (tot>1) return 0;
if (a[i]^b[i]) ++tot;
}
return tot<=1;
}
}
int main()
{
register int i;
std::ios::sync_with_stdio(false);
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
while (cin>>s[++n],s[n]!="#")
hash[s[n]]=1; --n;
while (cin>>t,t!="#")
{
if (hash[t]) cout<<t<<" is correct"<<endl; else
{
cout<<t<<":";
for (i=1;i<=n;++i)
if (cmp(s[i],t)) cout<<" "<<s[i];
cout<<endl;
}
}
return 0;
}

3080

题意是给你一些字符串,让你找它们的最长公共字串

同样因为范围很小,所以只需要枚举+find即可

CODE

#include<iostream>
#include<string>
using namespace std;
string s[15],ans;
int n,m,len,tot;
int main()
{
register int i,j,k;
ios::sync_with_stdio(false);
cin>>n;
while(n--)
{
cin>>m; tot=0; ans="";
for (i=1;i<=m;++i)
cin>>s[i]; len=s[1].size();
for (i=0;i<len;++i)
for (j=len-1;j>=i+tot-1;--j)
{
string temp(s[1],i,j-i+1);
bool flag=1;
for (k=2;k<=m;++k)
if (s[k].find(temp)==string::npos) { flag=0; break; }
if (flag)
{
if (temp.size()>tot) tot=temp.size(),ans=temp; else
if (temp.size()==tot&&temp<=ans) ans=temp;
}
}
if (ans.size()<3) cout<<"no significant commonalities"<<endl; else cout<<ans<<endl;
}
return 0;
}

1936

题意:对于两个字符串,判断s1是否为s2的一个子序列

注意这里是子序列,所以不能上find,手动模拟一个一个查找即可

CODE

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s1[100005],s2[100005];
int len1,len2,p;
int main()
{
register int i;
while (scanf("%s%s",&s1,&s2)!=EOF)
{
len1=strlen(s1); len2=strlen(s2); p=0;
bool flag=1;
for (i=0;i<len1;++i)
{
while (s2[p]!=s1[i]&&p<len2) ++p; ++p;
if (p>len2) { flag=0; break; }
}
puts(flag?"Yes":"No");
}
return 0;
}

最新文章

  1. c#中文件与二进制流文件的转换
  2. GDB的深入研究
  3. [SoapUI] 在SoapUI里获取Excel中多行数据并存入List
  4. Struts1 action重定向跳转 带参数
  5. Minimum configuration for openldap to proxy multiple AD into a single search base
  6. 解决AutoCAD2010在VS2010上无法命中断点
  7. UVa 10806 &amp; 费用流+意识流...
  8. java Hello 出现以下结果:Bad command or the file name 可能是什么原因
  9. *[topcoder]LongWordsDiv2
  10. iOS 各种传值方式
  11. 【USACO 5.3.1】量取牛奶 迭代
  12. VB输出数据到EXCEL
  13. java中的多线程入门
  14. [C++]Linux之文件拷贝在系统调用和C库函数下的效率比较
  15. Django知识点汇总
  16. shell模板变量替换
  17. django-templates过滤器
  18. 使用css技术代替传统的frame技术
  19. LeetCode135:Candy
  20. python---Django中模型类中Meta元对象了解

热门文章

  1. 常用的第三方模块 chardet url
  2. c# 通过GroupBy 进行分组
  3. 使用 Azure PowerShell 监视和更新 Windows 虚拟机
  4. Operating System Error Codes
  5. 转:C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、Sort)
  6. [Spark RDD_add_1] groupByKey &amp; reduceBykey 的区别
  7. ansible 增加本机/etc/hosts 下hostsname 与IP
  8. 用AOP拦截自定义注解并获取注解属性与上下文参数(基于Springboot框架)
  9. 一篇关于介绍php的几个user 认证相关的几个包
  10. 【Android自动化】unittest测试框架关于用例执行的几种方法