关闭

单词接龙

248人阅读 评论(0) 收藏 举报

思路,先提取首尾字母,组成两个字符串/字符数组。然后排序之后求两个字符数组/字符串的最大公共子序列

再判断最长公共子序列的长度是否等于源字符串的长度/源字符串长度-1

代码如下;

using namespace std;
void swap(char &a,char &b)
{
    char temp=a;
    a=b;
    b=temp;
}
void paixu(char str[],int num)
{
    for(int i=0;i<num-1;i++)
    {
        for(int j=0;j<num-i-1;j++)
        {
            if(str[j]>str[j+1])
                swap(str[j],str[j+1]);
        }
    }
}


int canArrangeWords(int num,char** arr){
    // WRITE YOUR CODE HERE
    char CharA[num];
    char CharB[num];
    for(int i=0;i<num;i++)
    {
        int len=strlen(arr[i]);
        //提取首字母
        CharA[i]=*arr[i];
        //提取尾字母
        CharB[i]=*(arr[i]+len-1);
        
    }
  //  sort(CharA,CharA+num);
  //  sort(CharB,CharB+num);
    paixu(CharA,num);
    paixu(CharB,num);
    int dp[num+1][num+1];
    memset(dp,0,sizeof(dp));
    for(int j=0;j<num+1;j++)
    {
        dp[j][0]=0;
    }
    for(int k=0;k<num+1;k++)
    {
        dp[0][k]=0;
    }
    for(int t=1;t<num+1;t++)
    {
        for(int v=1;v<num+1;v++)
        {
            if(CharA[t-1]==CharB[v-1])
            {
                dp[t][v]=dp[t-1][v-1]+1;
            }
            else
            {
                dp[t][v]=max(dp[t-1][v],dp[t][v-1]);
            }
        }
    }
    
    if(dp[num][num]==num-1 || dp[num][num]==num)
        return 1;
        else return -1;


}
// FUNCTION SIGNATURE ENDS


// DO NOT IMPLEMENT THE main( ) METHOD

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20487次
    • 积分:595
    • 等级:
    • 排名:千里之外
    • 原创:38篇
    • 转载:4篇
    • 译文:1篇
    • 评论:5条
    最新评论