第一题:
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int num[20];
int main()
{
int num_a = 0, num_b = 0;
string s, t;
cin>>s;
cin>>t;
//滑动窗的思路
//1、先预处理,把 0-length_diff 的 a、b个数加进去
//2、窗口后滑,加上 s[i + length_diff] 位置的a(或b)
//3、t[i]若为a,就加上滑动窗中的a的个数。b同理。
//4、把s[i]弹出滑动窗。
int length_diff = s.size() - t.size();
for (int i = 0; i < length_diff; i++) //第一步
{
if (s[i] == 'a')
num_a++;
else if (s[i] == 'b')
num_b++;
}
long long ans = 0;
for (int i = 0; i < t.length(); i++)
{
if (s[i + length_diff] == 'a') //第二步
num_a++;
else if (s[i + length_diff]=='b')
num_b++;
if (t[i] == 'a') //第三步
ans += num_b;
else if (t[i] == 'b')
ans += num_a;
if (s[i] == 'a') //第四步
num_a--;
else if(s[i] == 'b')
num_b--;
}
cout<<ans;
return 0;
}
第二题:
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int num[20];
int main()
{
string s;
cin>>s;
//思路:
//1、找0-9所有数字的个数
//2、如果个数最少的是1-9中的数字n,且为m个,那最后输出就是m + 1个n
//3、如果个数最少的是0,为m个,输出就是 1后面m + 1个0
for (int i = 0; i < s.size(); i ++)
num[s[i]-'0'] ++;
int minn = s.size() + 1;
for (int i = 0; i <= 9; i ++)
minn = min(minn, num[i]);
for (int i = 1; i <= 9; i ++) //如果最少的是1-9 输出就是最少那个数输出min+1次
{
if (num[i] == minn)
{
for (int j = 1; j <= minn + 1; j ++)
cout<<i;
return 0;
}
}
cout<<'1';
for (int i = 1; i <= minn + 1; i ++)
cout<<'0';
return 0;
}