#include<iostream>
using namespace std;
int main(){
string s1,s2;getline(cin,s1);getline(cin,s2);for(int i=0;i<min(s1.size(),s2.size());i++){if(s1[i]==s2[i])
cout<<i+1<<" ";}// system("pause");}
B - 首字母大写
#include<iostream>
using namespace std;
int main(){
string s1;getline(cin,s1);if(s1[0]>='a'&&s1[0]<='z')
s1[0]-=('a'-'A');for(int i=1;i<=s1.size();i++){if(s1[i]==' '||s1[i]=='\t'||s1[i]=='\n'||s1[i]=='\r')if(s1[i+1]>='a'&&s1[i+1]<='z')
s1[i+1]-=('a'-'A');}
cout<<s1;// system("pause");}
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;}return0;}
D - 数字反转
#include<stdio.h>
int main(){
int n,s=0;scanf("%d",&n);while(n){
s=s*10+n%10;
n/=10;}printf("%d\n",s);return0;}
E - 删除单词后缀
#include<iostream>
using namespace std;
int main(){
string s;
cin>>s;
int len=s.size();if(s.size()==2)
cout<<s;else{if(s[len-1]=='r'&&s[len-2]=='e')for(int i=0;i<len-2;i++)
cout<<s[i];elseif(s[len-1]=='y'&&s[len-2]=='l')for(int i=0;i<len-2;i++)
cout<<s[i];elseif(s[len-1]=='g'&&s[len-2]=='n'&&s[len-3]=='i'){if(len==3)
cout<<s;elsefor(int i=0;i<len-3;i++)
cout<<s[i];}else
cout<<s;}// system("pause");}
F - 判断字符串是否为回文
// An highlighted blockvar foo ='bar';```#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[1000010], t[1000010];
int ne[100010];
void getnext(char *t, int *ne)//得到next数组
{
ne[0] = -1;
int i = 0, k = -1, len = strlen(t);
while (i < len)
{
if (k == -1 || t[i] == t[k])
{
i++;
k++;
ne[i] = k;
}
else
{
k = ne[k];
}
}
}
int kmp(char *s, char *t)
{
int ans = 0, len = strlen(s), lend = strlen(t), j = 0, i = 0;
while(i <= len)
{
if (j == -1 || s[i] == t[j])
{
j++;
i++;
}
else
{
j = ne[j];
}
if (j == lend)
{
ans++;
j = ne[j];
}
}
return ans;
}
int main()
{
scanf("%s%s", s, t);
getnext(t, ne);
printf("%d\n", kmp(s, t));
// system("pause");
return 0;
}
# G - 基础数据结构——栈(1)
```javascript
#include<iostream>
#include<stack>
using namespace std;
stack<char>st;
int main(){
string s;while(getline(cin,s)){while(!st.empty())
st.pop();
int f=1;for(int i=0;i<s.size();i++){if(s[i]=='['||s[i]=='{'||s[i]=='(')
st.push(s[i]);if(s[i]==']')if(st.empty()){
cout<<"no"<<endl;
f=0;break;}elseif(st.top()!='['){
cout<<"no"<<endl;
f=0;break;}else
st.pop();elseif(s[i]=='}')if(st.empty()){
cout<<"no"<<endl;
f=0;break;}elseif(st.top()!='{'){
cout<<"no"<<endl;
f=0;break;}elseif(st.empty()){
cout<<"no"<<endl;
f=0;break;}else
st.pop();elseif(s[i]==')')if(st.empty()){
cout<<"no"<<endl;
f=0;break;}elseif(st.top()!='('){
cout<<"no"<<endl;
f=0;break;}else
st.pop();}if(!st.empty()&&f){
cout<<"no"<<endl;}if(f)
cout<<"yes"<<endl;}// system("pause");}
H - 字典序
#include<iostream>
using namespace std;
int main(){
string s1,s2;
cin>>s1>>s2;if(s1<s2)
cout<<"YES";else
cout<<"NO";}
I - 验证子串
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string a,b;
int main(){
cin>>a>>b;if(a.find(b)!=a.npos)
cout<<b<<" is substring of "<<a<<"\n";elseif(b.find(a)!=b.npos)
cout<<a<<" is substring of "<<b<<"\n";else cout<<"No substring\n";return0;}
J - 子串查找
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[1000010], t[1000010];
int ne[100010];voidgetnext(char *t, int *ne)//得到next数组{
ne[0]=-1;
int i =0, k =-1, len =strlen(t);while(i < len){if(k ==-1|| t[i]== t[k]){
i++;
k++;
ne[i]= k;}else{
k = ne[k];}}}
int kmp(char *s, char *t){
int ans =0, len =strlen(s), lend =strlen(t), j =0, i =0;while(i <= len){if(j ==-1|| s[i]== t[j]){
j++;
i++;}else{
j = ne[j];}if(j == lend){
ans++;
j = ne[j];}}return ans;}
int main(){scanf("%s%s", s, t);getnext(t, ne);printf("%d\n",kmp(s, t));// system("pause");return0;}
K - 剪花布条
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
using namespace std;
#define maxn 1001
string a;
string b;
int Next[maxn];voidmakenext(int bl){
Next[0]=0;for(int i =1, j =0; i < bl; i++){while(j>0&& b[j]!= b[i])
j = Next[j -1];if(b[i]== b[j]){
j++;}
Next[i]= j;}}
int kmp(int al, int bl){makenext(bl);
int cnt =0;for(int i =0, j =0; i < al; i++){while(j>0&& b[j]!= a[i])
j = Next[j -1];if(b[j]== a[i])
j++;if(j == bl){
cnt++;
j=0;//相当于重新看待主串和模板串的关系,去掉前面已匹配的主串成为新串,故清零j}}return cnt;}
int main(){while((cin >> a)&&(a !="#")){
cin >> b;memset(Next,0,sizeof(Next));
int al = a.length();
int bl = b.length();
int res =kmp(al, bl);
cout << res << endl;}}
L-最长回文子串
#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;const int maxn=1000;
char S[maxn];
int dp[maxn][maxn];
int main(){scanf("%s",S);
int len=strlen(S),ans=1;memset(dp,0,sizeof(dp));for(int i=0;i<len;i++){
dp[i][i]=1;if(i<len-1){if(S[i]==S[i+1]){
dp[i][i+1]=1;
ans=2;}}}for(int L=3;L<=len;L++)for(int i=0;i+L-1<len;i++){
int j=i+L-1;if(S[i]==S[j]&&dp[i+1][j-1]==1){
dp[i][j]=1;
ans=L;}}
cout<<ans<<endl;// system("pause");}