A-雷同检测
组个比较字符,找到相同的字符输出
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b;
getline(cin,a);
getline(cin,b);
for(int i=0;i<a.size();i++)
{
if(a[i]==b[i])cout<<i+1<<" ";
}
return 0;
}
B-首字母大写
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
getline(cin,a);
if(a[0]>=97&&a[0]<=122)a[0]-=32;
for(int i=0;i<a.size();i++)
{
if(a[i+1]>=97&&a[i+1]<=122&&a[i]==' ')a[i+1]-=32;
}
cout<<a<<endl;
return 0;
}
C-大小写转换
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
while(cin>>a)
{
for(int i=0;i<a.size();i++)
{
if(a[i]>=97&&a[i]<=122)a[i]-=32;
}
cout<<a<<endl;
}
return 0;
}
D-数字反转
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
int cnt=0;
bool ok=0;
cin>>a;
if(a[0]=='-')
{
cout<<a[0];ok=1;
}
for(int i=a.size()-1;i>=0;i--)
{
if(a[i]=='0')cnt++;
else break;
}
for(int i=a.size()-cnt-1;i>=ok;i--)
{
cout<<a[i];
}
return 0;
}
E-删除单词后缀
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin>>a;
int len=a.size();
if((a[len-1]=='r'&&a[len-2]=='e')||(a[len-1]=='y'&&a[len-2]=='l'))
{
for(int i=0;i<len-2;i++)
cout<<a[i];
}
else if(a[len-1]=='g'&&a[len-2]=='n'&&a[len-3]=='i')
{
for(int i=0;i<len-3;i++)
cout<<a[i];
}
else cout<<a<<endl;
return 0;
}
F-判断字符串是否为回文
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin>>a;
int len=a.size();
int ok=1;
for(int i=0,j=len-1;i<j;i++,j--)
{
if(a[i]!=a[j])
{
ok=0;
break;
}
}
if(ok==0)cout<<"no"<<endl;
else cout<<"yes"<<endl;
return 0;
}
G-基础数据结构-栈
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
string a;
while(getline(cin,a))
{
if(a=="")continue;
int ok=0;
stack<char>st;
for(int i=0;i<a.size();i++)
{
if(a[i]=='('||a[i]=='['||a[i]=='{')
st.push(a[i]);
else if(a[i]=='}'||a[i]==')'||a[i]==']')
{
if(st.empty())
{
ok=1;
cout<<"no"<<endl;
break;
}
char ch=st.top();
if(a[i]==')'&&ch=='(')st.pop();
else if(a[i]=='}'&&ch=='{')st.pop();
else if(a[i]==']'&&ch=='[')st.pop();
else
{
ok=1;
cout<<"no"<<endl;
break;
}
}
}
if(ok==0)
{
if(st.empty())cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
}
return 0;
}
H-字典序
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
if(a<b)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}
I-验证子串
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
if(a.find(b)!=string::npos)cout<<b<<" is substring of "<<a<<endl;
else if(b.find(a)!=string::npos) cout<<a<<" is substring of "<<b<<endl;
else cout<<"No substring"<<endl;
return 0;
}
J-子串查找
学习理解kmp算法
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int ne[1000100],len1,len2;
char a[1000100],b[1000100];
void get_next()
{
int j=-1,i=0;
ne[0]=-1;
while(i<len2)
{
if(j==-1||b[i]==b[j])
{
i++;
j++;
ne[i]=j;
}
else
j=ne[j];
}
}
void kmp()
{
int j=0,i=0;
int ans=0;
while(i<len1)
{
if(j==-1||a[i]==b[j])
{
++i;
++j;
}
else
j=ne[j];
if(j==len2)
{
j=ne[j];
ans++;
}
}
printf("%d\n",ans);
}
int main()
{
scanf("%s %s",a,b);
len1=strlen(a);
len2=strlen(b);
if(len2>len1)
printf("0\n");
get_next();
kmp();
return 0;
}
K-剪花布条
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b;
while(cin>>a,a!="#")
{
cin>>b;
int l1=a.size(),l2=b.size();
int cnt=0;
for(int i=0;i<l1-l2+1;i++)
{
int ok=0;
for(int j=0;j<l2;j++)
{
if(b[j]!=a[i+j])
{
ok=1;
break;
}
}
if(ok==0)
{
i+=l2-1;
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}
L-最长回文串
学习马拉车算法求最长回文串
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int MAXN=110010;
char Ma[MAXN*2];
int Mp[MAXN*2];
void Manacher(char s[],int len)
{
int l=0;
Ma[l++]='$';
Ma[l++]='#';
for(int i=0;i<len;i++)
{
Ma[l++]=s[i];
Ma[l++]='#';
}
Ma[l]=0;
int mx=0,id=0;
for(int i=0;i<l;i++)
{
Mp[i]=mx>i?min(Mp[2*id-i],mx-i):1;
while(Ma[i+Mp[i]]==Ma[i-Mp[i]])Mp[i]++;
if(i+Mp[i]>mx)
{
mx=i+Mp[i];
id=i;
}
}
}
char s[MAXN];
int main()
{
scanf("%s",s);
int len=strlen(s);
Manacher(s,len);
int ans=0;
for(int i=0;i<2*len+2;i++)
ans=max(ans,Mp[i]-1);
printf("%d\n",ans);
return 0;
}