经测试字符串s的长度在1000以内;
遇到*时分两步,
第一步直接迭代到末尾;
第二步依次返回;即为*分别取 最大~0 时的情况
string p, s;
set<int> se;
void dfs(int a, int b) {
if (a == p.size()) {
se.insert(b - 1);
}
else if (b == s.size()){
if(a==p.size()-1&&p[a]=='*')
{se.insert(b-1);}
}
else if (p[a] == s[b]) {
dfs(a + 1, b + 1);
}
else if (p[a] == '*') {
dfs(a, b + 1);
dfs(a + 1, b);
}
}
void solve() {
cin >> p >> s;
int ans=0;
for (int i = 0; i < s.size(); i++) {
dfs(0,i);
if(!se.empty())ans++;
for (int end : se) {
if(end-i+1==0)continue;
cout << i << " " << end - i + 1<<endl;
}
se.clear();
}
if(ans==0){
cout<<-1<<" "<<0;
}

京公网安备 11010502036488号