经测试字符串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;
    }

alt