Ksh*_*jee 7 c++ string algorithm list
题
实现一个函数bool chainable(vector<string> v),它接受一组字符串作为参数,并返回true它们是否可以链接.如果第一个字符串以第二个字符串开头的相同字符结尾,则可以链接两个字符串,例如:
ship->petal->lion->nick = true;
ship->petal axe->elf = false;
Run Code Online (Sandbox Code Playgroud)
我的解决方案
我的逻辑是,如果它的可链接只有一个不匹配的开始和结束.所以我创建了一个开始列表和一个结束列表.像这样.
starts:s,p,l,n
ends: p,l,n,k
Run Code Online (Sandbox Code Playgroud)
如果删除公共元素,列表最多应包含一个项目.即s和k.如果是这样,列表是可链接的.如果列表是循环的,则最终列表为空.
但我想我在这里遗漏了一些案例,
编辑: 好的,我的解决方案有问题.我们能否为此得出最佳算法?
Dan*_*her 11
问题是检查有向图中是否存在欧拉路径,其顶点是作为至少一个提供的单词的第一个或最后一个字母出现的字母,其边是提供的单词(每个单词是其第一个字母的边缘)到最后).
在这些图中存在欧拉路径的一些必要条件:
很容易看出必要性:如果图形具有欧拉路径,则任何此类路径都会遇到除孤立顶点之外的所有顶点(既不是传出边也不是传入边).通过构造,这里考虑的图中没有孤立的顶点.在欧拉路径中,每次访问顶点时,除了开始和结束之外,都使用一个入射边缘和一个出射边缘,因此每个顶点可能除了起始和结束顶点之外具有相同的入射和出射边缘.除非Eulerian路径是一个循环,否则起始顶点比传入顶点有一个更多的出局边缘,而结尾顶点多一个出局边缘,在这种情况下,所有顶点都有相同的输入和输出边缘.
现在重要的是这些条件也足够了.人们可以通过感应来证明边缘的数量.
这样可以进行非常有效的检查:
indegree - outdegree所有顶点如果number of components > 1(至少)有一个顶点|indegree - outdegree| > 1或者顶点有两个以上的顶点indegree != outdegree,则这些单词不可链接,否则它们是可链接的.