很简单

· · 题解

思路

用动态数组记录下所有的字母的位置,每一次搜索到的字符都从记录的下标中找到距离最小的字符(直接循环遍历),如果没有记录就加上 S 的长度。

超级简单的代码

主函数前三行没有太大用处可以不写。

#include<bits/stdc++.h>
using namespace std;
string c;
vector<int> v[1005];
int n,m;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    cin>>c;
    for(int i=0;i<c.size();i++)v[c[i]-'a'].push_back(i);
    while(n--){
        long long ans=0;
        string s;
        cin>>s;
        for(int i=0;i<s.size();i++){
            int minn=0x3f3f3f3f;
            if(v[s[i]-'a'].size()==0){
                ans+=s.size();
                continue;
            }
            for(int j=0;j<v[s[i]-'a'].size();j++){
                minn=min(minn,abs(v[s[i]-'a'][j]-i));
            }
            ans+=minn;
        }
        cout<<ans<<"\n";
        ans=0;
    }
    return 0;
}