今日头条,很干脆,直接就四个编程,一个改错。。。做的很烂,只能来写一个题。
字符串S由小写字母构成,长度为N,定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换,在询问至多从、交换M次之后,字符串中最多有多少个连续的位置上字符相等。
输入为字符串和长度,输出一个数字。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int fun(string st,int num)
{
int size = st.length();
int **ar = new int*[size];
for(int i = 0; i < size; ++i)
{
ar[i] = new int[26];
}
for(int i = 0; i < size; ++i)
{
ar[i][st[i] - 'a'] = 1;
}
int *br = new int[26];
memset(br,0,sizeof(int)*26);
int *cr = new int[26];
memset(cr,0,sizeof(int)*26);
int left = 0;
int right = 0;
for(int i = 0; i < 26; ++i)
{
for(int j = 0; j < size; ++j)
{
if(ar[j][i] == 1)
{
if(br[i] == 0)
{
left = j;
}
br[i]++;
right = j;
}
}
cr[i] = right - left;
}
for(int i = 0; i < 26; ++i)
{
for(int j = i+1; j < 26; ++j)
{
if(br[i] < br[j])
{
int tmp = br[i];
br[i] = br[j];
br[j] = tmp;
tmp = cr[i];
cr[i] = cr[j];
cr[j] = tmp;
}
}
}
for(int i = 0; i < 26; ++i)
{
if(cr[i] <= num)
return br[i];
}
}
int main()
{
string st;
cin>>st;
int n;
cin>>n;
cout<<fun(st,n)<<endl;
return 0;
}
在本地IDE上可以编译运行,也可以怼出来测试用例,但是,在线笔试的网页上不能编译通过。。。。很尴尬。