输入两个字符串S,P
atpaaabpabttpcat
pat
根据题意,在S字符串中找到包含P字符串的最短子字符串
例如给出的S字符串中包含P字符串的子字符串有
paaabpabt
pabt
pcat
题目中要求,如果最短的不唯一,输出最左边的
我的方法是
在S中找到P字符串的第一个字符,然后将它们的位置保存到数组中。
然后遍历数组,找到最短且最右的子字符串
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e4+5;
int n,m,t;
vector<int> v;
void solve(){
string s,p;
cin>>s>>p;
for(int i=0;i<s.size();i++){
if(s[i]==p[0]){
v.push_back(i);
}
}
int mmin=INT_MAX,begin,end;
for(int k=0;k<v.size();k++){
int l=v[k];
int r=l+1;
int idx=1;
for(;r<s.size();r++){
if(s[r]==p[idx]) idx++;
if(idx==p.size()) break;
}
if(idx==p.size()){
if(mmin>r-l+1){
mmin=r-l+1;
begin=l;
end=r;
}
}
}
for(int i=begin;i<=end;i++){
cout<<s[i];
}
}
signed main(){
t=1;
// cin>>t;
while(t--) solve();
}