zoukankan      html  css  js  c++  java
  • C++ 单词接龙

    问题描述:

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

     

  • 相关阅读:
    iframe框架
    HTML 中 id与name 区别
    使用display:inline-block产生间隙
    html5新增语义化标签
    子选择器与后代选择器的区别
    各种居中问题
    腾讯 地图 机器学习岗 春招实习123面(猝)
    腾讯 微信春招nlp实习生一面二面(猝)
    264. Ugly Number II(丑数 剑指offer 34)
    263. Ugly Number(判断是否是丑数 剑指offer34)
  • 原文地址:https://www.cnblogs.com/cynthia-dcg/p/6820285.html
Copyright © 2011-2022 走看看