关闭

单词接龙

140人阅读 评论(0) 收藏 举报
分类:

单词接龙
拉姆刚开始学习英文单词,对单词排序很感兴趣。
如果给拉姆一组单词,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一单词的为字母相同。
你能编写一个程序来帮助拉姆进行判断吗?

输入描述:

输入包含多组测试数据。 对于每组测试数据,第一行为一个正整数n,代表有n个单词。 然后有n个字符串,代表n个单词。 保证: 2<=n<=200,每个单词长度大于1且小于等于10,且所有单词都是由小写字母组成。



输出描述:

对于每组数据,输出"Yes"或"No"


输入例子:
  3
  abc
  cdefg
  ghijkl
  4
  abc
  cdef
  fghijk
  xyz
  

输出例子:
  Yes
  No
  


#include<iostream>
#include<string>
#include<queue>
using namespace std;
int canArrangeWords(int num, string* arr)
{
	if (num<1 || num>100)
		return -1;
	queue<string> qs;
	for (int i = 0; i < num; i++)
	{
		qs.push(arr[i]);
		int len = arr[i].size();
		if (len<2 || len>100)
			return -1;
	}
	int count = 1;
	int count1 = 0;
	char head = qs.front().at(0);
	char end = qs.front().at(arr[0].size() - 1);
	qs.pop();
	while (!qs.empty() && (count + count1 <= num))
	{
		int len = qs.front().size();
		if (qs.front().at(0) == end)
		{
			end = qs.front().at(len - 1);
			qs.pop();
			count++;
		}
		else if (qs.front().at(len - 1) == head)
		{
			head = qs.front().at(0);
			qs.pop();
			count++;
		}
		else
		{
			qs.push(qs.front());
			qs.pop();
			count1++;
		}
	}
	if (count == num)
		return 1;
	return -1;
}
int main()
{
	int num;
	while (cin >> num)
	{
		getchar();
		string *s = new string[num];
		for (int i = 0; i < num;i++)
		{
			getline(cin,s[i]);
		}
		int res = canArrangeWords(num,s);
		if (res == 1)
			cout << "YES" << endl;
		else
			cout << "No" << endl;
	}
}


1
0

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