思路:
用两个指针,分别指向母串和子串,然后依次从母串遍历,遍历的时候和子串比较。
设置一个最小长度和存储对应最小长度的字符串ans。
// 03.12 11:00
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
int main() {
freopen("input.txt", "r", stdin);
string str, tar;
cin >> str >> tar; // 输入 字符串str,子串tar
int minlen = str.size() + 1; // 获取 字符串str的大小,为啥+1?
string ans; // 存放当前匹配的子序列
for (int i = 0; i + tar.size() <= str.size(); i++) { // 遍历母串str
int j = i, pos = 0; // pos指向子串pat的下标
for (; j <= str.size() && pos < tar.size(); j++) { // 从母串的当前i开始找包含pat的子序列
if (str[j] == tar[pos]) // 如果子序列和子串的值对上号,就把子串的下标pos右移一位,找下一个对上号的
pos++;
}
if (pos == tar.size()) { // 匹配完,
if (j - i < minlen) { // 如果当前子序列比最小的还要小
minlen = j - i;
ans = str.substr(i, minlen); // 赋值ans为子序列
}
}
}
cout << ans << endl;
return 0;
}