<分区>
此代码应将两个字符串作为输入。这些字符串只有字母字符(a-z 和 A-Z),但它给了我“执行被信号 11 杀死(可能因违反内存限制而触发)”。但我不明白为什么因为我使用两个数组 car 和 carQ 通过执行 car[char-'A'] 来存储有关字母字符存在的信息并且这个索引总是大于或等于零且小于 60。做你有什么想法吗?
#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
#include <string>
#include <utility>
#include <stdio.h>
#include <queue>
#include <fstream>
#include <functional>
#include <cstdlib>
#include <map>
#include <set>
#include <bitset>
#define MAX_N 20000005
using namespace std;
typedef pair<int, int> ii ;
typedef vector< ii > vii ;
typedef vector<int> vi ;
int n,m,s,car[60],carQ[60];
string W,S;
queue<char> q;
int main() {
ifstream in; ofstream out;
in.open("input.txt"); out.open("output.txt");
in>>n>>m;
for(int i=0;i<n;i++){
in>>S[i];
car[(int)(S[i]-'A')]++;
}
for(int i=0;i<m;i++)
in>>W[i];
for(int i=0;i<m;i++){
if(!car[(int)(W[i]-'A')])
while(!q.empty()){
carQ[q.front()-'A']--;
q.pop();
}
else{
q.push(W[i]);
carQ[(int)(W[i]-'A')]++;
while(carQ[(int)(W[i]-'A')]>car[(int)(W[i]-'A')]){
carQ[q.front()-'A']--;
q.pop();
}
if(q.size()==n)
s++;
}
}
out<<s;
in.close(); out.close();
return 0;
}