关于求连接处重叠字符问题
查看原帖
关于求连接处重叠字符问题
480739
T1z1anXXX楼主2022/9/1 21:24
int connect(string s1, string s2)
{
    for(int i = 1; i < min(s1.size(), s2.size()); i++)
    {
        for(int j = 0; j < i; j++)
        {
            if(s1[s1.size() - i + j] != s2[j])
                break;
            return i;
        }
    }
    return 0;
}

上面这个函数求连接处重叠字符长度wa,改成下面这个就ac了???

int connect(string s1, string s2)
{
    for(int i = 1; i < min(s1.size(), s2.size()); i++)
    {
        int flag = 1;
        for(int j = 0; j < i; j++)
        {
            if(s1[s1.size() - i + j] != s2[j])
                flag = 0;
        }
        if(flag)
            return i;
    }
    return 0;
}

下面是整体代码

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;

string str[20];
int length = 0, n;
int freq[20];
int connect(string s1, string s2)
{
    for(int i = 1; i < min(s1.size(), s2.size()); i++)
    {
        int flag = 1;
        for(int j = 0; j < i; j++)
        {
            if(s1[s1.size() - i + j] != s2[j])
                flag = 0;
        }
        if(flag)
            return i;
    }
    return 0;
}
int dfs(string ss, int lengthnow)
{
    length = max(length, lengthnow);
    cout<<length<<" ";
    for(int i = 0; i < n; i++)
    {
        if(freq[i] >= 2) continue;
        int overlap = connect(ss, str[i]);
        if(overlap > 0)
        {
            freq[i]++;
            dfs(str[i], lengthnow + str[i].size() - overlap);
            freq[i]--;
        }
    }
}
int main()
{
    cin>>n;
    for(int i = 0; i <= n; i++)
    {
        freq[i] = 0;
        cin>>str[i];
    }
    dfs('#' + str[n], 1);
    cout<<length;
    return 0;
}
2022/9/1 21:24
加载中...