zoukankan      html  css  js  c++  java
  • 字符串联接 【微软面试100题 第三十七题】

    题目要求:

      有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接。

      问这n个字符串最多可以连成一个多长的字符串,如果出现死循环,则返回错误。

    题目分析:

      1.每个字符串都是长为m+1的字符串,两个字符串匹配后长度应该为1+m+1=m+2;

      2.用图的思想来解。如果某两个顶点匹配,则在图中的该两点连线,当遍历完所有点之后,判断该图是否有环,没有就求该图的最长路径;

      3.求图的最长路径与求最短路径类似,可以参考Floyd最短路径算法;

    代码实现:

    代码链接:http://blog.csdn.net/cxh342968816/article/details/6637006

    #include<iostream>
    #include<string>
    using namespace std;
    
    #define length 14
    
    bool Isconnect(string str1,string str2)
    {
        if(str1.size()!=str2.size())
            return false;
        int m=str1.size();
        for(int i=0;i<m-1;i++)
        {
            if(str1[i+1]!=str2[i])
                return false;
        }
        return true;
    }
    
    void Maxstring(string str[])
    {
        int G[length][length]={0};
        for(int i=0;i<length;i++)
            for(int j=0;j<length;j++)
                if(Isconnect(str[i],str[j]))
                    G[i][j]=1;
        for(int i=0;i<length;i++)
        {
            for(int j=0;j<length;j++)
            {
                for(int k=0;k<length;k++)
                {
                    if(G[i][k]!=0&&G[k][j]!=0)
                    {
                        int dis=G[i][k]+G[k][j];
                        if(dis>G[i][j])
                            G[i][j]=dis;
                    }
    
                }
            }
        }
        for(int i=0;i<length;i++)
        {
            if(G[i][i]>1)
            {
                cout<<"circle is deteted"<<endl;
                return;
            }
        }
        int max=0;
        for(int i=0;i<length;i++)
        {
            for(int j=0;j<length;j++)
            {
                if(G[i][j]>max)
                    max=G[i][j];
    
            }
        }
        cout<<"Max length is "<<max+str[0].size()<<endl;
    
    }
    
    
    
    int main()
    {
        string str[length]={
            "abcd",
            "bcde",
            "cdea",
            "deab",
            "eaba",
            "abab",
            "deac",
            "cdei",
            "bcdf",
            "cdfi",
            "dfic",
            "cdfk",
            "bcdg",
    //        "babc"};//用这个替换下面一行,就会形成环
            "babf"};
            Maxstring(str);
    
    }
  • 相关阅读:
    java对象的四种引用:强引用、软引用、弱引用和虚引用
    css引入的两种方法link和@import的区别和用法
    java注解和自定义注解的简单使用
    java代理:静态代理和动态代理
    java设计模式:面向对象设计的7个原则
    java设计模式:概述与GoF的23种设计模式
    java依赖的斗争:依赖倒置、控制反转和依赖注入
    Official Program for CVPR 2015
    Official Program for CVPR 2015
    2013计算机视觉代码合集一
  • 原文地址:https://www.cnblogs.com/tractorman/p/4065544.html
Copyright © 2011-2022 走看看