百度2017暑假实习生编程题——单词接龙

拉姆刚开始学习英文单词,对单词排序很感兴趣。
 如果给拉姆一组单词,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一单词的为字母相同。
 你能编写一个程序来帮助拉姆进行判断吗?
 
输入描述:
  输入包含多组测试数据。
  对于每组测试数据,第一行为一个正整数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<vector>
#include<string>

using namespace std;

int main() {
    int n;
    while (cin >> n) {
        vector<string> svec;
        for (int i = 0; i < n; ++i) {
            string s;
            cin >> s;
            svec.push_back(s);
        }
        int count = 0;
        auto it = svec.begin();
        while (svec.size() > 1 && count < 2 && it != svec.end()) {
            int pa = 0;
            auto iq = it + 1;
            for (; iq != svec.end(); ++iq) {
                if ((*it)[(*it).size() - 1] == (*iq)[0]) {
                    *it += (*iq)[(*iq).size() - 1];
                    svec.erase(iq);
                    pa = 1;
                    break;
                }
            }
            if (pa == 0) {
                ++it;
                ++count;
            }
        }
        if (svec.size() == 1)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
    return 0;
}

 

 
posted @ 2016-06-24 15:33  VanDiem  阅读(979)  评论(0)    收藏  举报