代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char big[200000]={0};
char want[20000]={0};
char* pd = 0;
int* posmin = (int*)malloc(10000*sizeof(int));
int* pos2 = (int*)malloc(10000*sizeof(int));
int* ttt = 0;
int tms = 0;
int minlen = 0,tmp = 0;
int biglen,wantlen;
int i,j;
scanf("%s",big);
scanf("%s",want);
biglen = strlen(big);
wantlen = strlen(want);
memcpy(want+wantlen,want,wantlen);
pd = want;
while(true)
{
j = 0;
tmp = 0;
for(i = 0;i<wantlen;i++)
{
for(;j< biglen;j++)
{
if(big[j] == pd[i])
{
pos2[i] = j;
tmp += j;
j++;
break;
}
}
if(j == biglen)
break;
}
if(i == wantlen && (minlen == 0 || tmp < minlen) )
{
minlen = tmp;
ttt = posmin;
posmin = pos2;
pos2 = ttt;
}
tms++;
if(tms >= wantlen)
break;
else
{
pd++;
}
}
for (i = 0;i<wantlen;i++)
{
if(i < wantlen -1)
printf("%d ",posmin[i]+1);
else
printf("%d\n",posmin[i]+1);
}
free(posmin);
free(pos2);
return 0;
}
要代码?
当然 这个可能会超时 极有可能会超时
#include<bits/stdc++.h>
using namespace std;
const int N = 200000;
bool c[N];
int main(){
string a;
cin >> a;
string b;
cin >> b;
for (int i = 0; i < a.size(); ++i) {
for (int j = 0; j < b.size(); ++j) {
if (a[i] == b[j] && c[j] == false) {
c[j] = true;
cout << i + 1 << " ";
break;
}
}
}
return 0;
}