C++ 单词接龙

问题描述:

  1. 拉姆刚刚开始学习英文字母,对单词排序很感兴趣,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一个单词的尾字母相同,力能编写一个计算机程序帮助拉姆进行判断吗?
  2. 函数canArrangeWords的输入包含一个整数num和一个单词arr。num表示列表中单词的数目(1<=num<=100),而arr应包含只由’a’-‘z’组成的单词(2<=arr中单词长度<=100)
  3. 如果列表中的单词可按照要求的方式排列,返回1;否则返回-1。在这种排列中,列表中的第一个单词可以任意字母开头,不需要满足约束条件。
  4. 测试用例:
  5. TestCase 1:Input:4, [abcd,defg,ghij,jkl] Expected Return Value:1
  6. TestCase 2: Input: 4,[ghij,defg,jkl,abcd] Expected Return Value:-1

问题分析:

  1. 1.定义两个变量,代表当前匹配通过的start和end
  2. 2.对于下一个word来说,有可能是首尾匹配,也有可能是尾首匹配,分别更新start和end即可。
  3. 3.如果下一个word跟当前不匹配,我们把当且word放入容器的尾部(因为可能会在后面完成匹配)
  4. 4.如此循环,所有都匹配成功,或者匹配和不匹配的单词总数超过单词总数
  5. 5.根据上述1-4步骤,很容易联想到用队列作为数据结构。

     1 using namespace std;
     2 int canArrangeWords(int num,char** arr){
     3 if(num<1||num>100)
     4 return -1;
     5 queue<string> qs;
     6 for(int i=0;i<num;i++)
     7 {
     8 qs.push(arr[i]);
     9 int len=strlen(arr[i]);
    10 if(len<2||len>100)
    11 return -1;
    12 }
    13 int count=1;
    14 int countr=0;
    15 char head=qs.front().at(0);
    16 char end=qs.front().at(strlen(arr[0]-1);
    17 qs.pop();
    18 while(!qs.empty()&&(count+countr<=num))
    19 {
    20 int len=strlen(qs.front().c_str());
    21 if(qs.front().at(0)==end)
    22 {
    23 end=qs.front().at(len-1);
    24 qs.pop();
    25 count++;
    26 }
    27 else if(qs.front().at(len-1)==head)
    28 {
    29 head=qs.front().at(0);
    30 qs.pop();
    31 count++;
    32 }
    33 else
    34 {
    35 qs.push(qs.front());
    36 qs.pop();
    37 countr++;
    38 }
    39 }
    40 if(count==num)
    41 return 1;
    42 return -1;
    43 }
时间: 2024-08-30 10:27:53

C++ 单词接龙的相关文章

单词接龙(codevs 1018)

2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如a

NOIP2000 单词接龙

题三.  单词接龙                (27分)    问题描述    单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连.  输   入  输入的第一行为一个单独的整数n (n<=2

洛谷 P1019 单词接龙 深搜

题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙"中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连. 输入输出格式 输入格式: 输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每

luogu 1019 单词接龙 dfs细节

P1019 单词接龙 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连. 输入输出格式 输入格式: 输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每行有一个单词,

NOIP2000单词接龙[DFS]

题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连. 输入输出格式 输入格式: 输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单

cogs luogu 单词接龙

题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙"中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连. 输入输出格式 输入格式: 输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每

1019 单词接龙

难度:普及/提高- 题目类型:深搜 提交次数:5 涉及知识:深搜 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连. 输入输出格式 输入格式: 输入的第一行为一个单独的整数n (n<=

洛谷——P1019 单词接龙(NOIP2000 T3)

https://www.luogu.org/problem/show?pid=1019#sub 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连. 输入输出格式 输入格式: 输入的第一

dfs(洛谷1019 单词接龙NOIp2000提高组第三题)

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连. 输入格式: 输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的

P1019 单词接龙

题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连. 输入输出格式 输入格式: 输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单