java:单词接龙

题目

问题描述单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连。输入格式输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.输出格式只需输出以此字母开头的最长的“龙”的长度样例输入5attouchcheatchoosetacta
样例输出
23
样例说明连成的“龙”为atoucheatactactouchoose
import java.util.Scanner;public class 单词接龙 {//字符串private static String[] a;private static int n,max=0;//单词个数private static int visit[];private static String tmp,s,s1;private static char st;public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);n = sc.nextInt();a = new String[n];for(int i=0;i<n;i++){a[i]=sc.next();}s=sc.next();st=s.charAt(0);visit=new int[n];for(int i=0;i<n;i++){if(findS1(a[i])){dfs(s1);//从第一个单词开始}}System.out.println(max);}//是否找到第一个单词private static boolean findS1(String a) {// TODO Auto-generated method stubchar ss[]=a.toCharArray();if(ss[0]==st){s1=a;//开始的单词就为areturn true;}else{return false;}}//s的状态会改变,长度会改变public static void dfs(String ss){//先进行匹配,从开头的一个字母出发,之后一个个进行匹配,如果大于这个数就标记位正确的String temp="";temp=ss;if(max<=ss.length()){max=ss.length();}//从0开始查找for(int i=0;i<a.length;i++){//ss和当前字符串开始连接和判断时不是相同的字符串,相同的不可以连接,还有没有访问过if(visit[i]<2&&checkString(ss,a[i])&&contact(ss,a[i])){visit[i]++;ss=tmp;//两个单词连接之后的,dfs(ss);//在把这个连接了的再进行遍历ss=temp;//如果不是,ss还是等于之前的tempvisit[i]--;//并回溯}}}private static boolean checkString(String a, String b) {// TODO Auto-generated method stubString a1;String b1;//相同的单词不包含if(a.length()<=b.length()){a1=a;b1=b;}else{a1=b;b1=a;}char a11[]=a1.toCharArray();char b11[]=b1.toCharArray();if(a1.equals(b1)){return true;}for(int i=0;i<a11.length;i++){if(a11[i]!=b11[i]){return true;}}return false;}public static boolean contact(String a,String b){char s11[]=a.toCharArray();char s22[]=b.toCharArray();for(int j=0;j<b.length()&&j<a.length();j++){//s11的最后一个字母等于s22的字母,这个如果是一个连续的字母,例如ch chest,最后一个字母就等于第二个字母if(s11[s11.length-1]==s22[j]){//s11从后往前检查,s22从前往后检查for(int k1=s11.length-1,k2=j;k1>=0&&k2>=0;k1--,k2--){if(s11[k1]!=s22[k2]){return false;}//当k2到了开头的位置if(k2==0){//从j+1开始往后面取b=b.substring(j+1);tmp=a+b;//进行连接了return true;}}}}return false;}}

java:单词接龙(dfs)(重点看看:包括相同单词不包含,还有找到第一个相同的开头单词相同的字母,连接字符串重复部分删除)相关推荐

  1. P1019 单词接龙 (DFS)

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  2. codevs1018 单词接龙(DFS)

    题目描述 Description 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在 ...

  3. NOIP2000单词接龙[DFS]

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  4. 字典树/Trie/前缀树-LeetCode总结:720词典中最长的单词;127. 单词接龙;677. 键值映射;面试题 17.17. 多次搜索;648. 单词替换

    MyTrie结构体和相关操作函数 typedef struct MyTrie {bool is_word;vector<MyTrie*> next;MyTrie():is_word(fal ...

  5. python找到一行单词中最长的_在Python的给定列表中找到k个最长的单词

    我们有一种情况,我们必须从包含许多长度不同的单词的列表中选择前n个最长的单词.在本文中,我们将看到实现这一目标的各种方法. 与count()和sorted() 我们首先以相反的顺序对列表中的元素进行排 ...

  6. P1019 [NOIP2000 提高组] 单词接龙

    P1019 [NOIP2000 提高组] 单词接龙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 整体思路:1.先将每个单词与另外的单词重叠的部分算出来记作yc[][]: 2.然后 ...

  7. LeetCode 126. 单词接龙 II(图的BFS)

    1. 题目 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列. 转换需遵循如下规则: 每次转换只能 ...

  8. Java 算法 单词接龙

    目录标题 题目描述 解题思路 代码 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个 ...

  9. 洛谷 P1019 单词接龙 Label:dfs

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

最新文章

  1. 蚂蚁森林最高效的合种团队—招募有合作精神的队友云植树
  2. 手把手教你部署一个最小化的 Kubernetes 集群
  3. php check name,checkname.php
  4. 土地利用覆被变化的概念_欠压实概念极其荒谬
  5. oracle实例是否有dbid,Oracle如何获得数据库的DBID
  6. Head First设计模式读书笔记六 第七章上 适配器模式
  7. 开源大数据:Databricks Lakehouse
  8. spring5.0学习笔记10
  9. linux日志级别的正确使用(printk)
  10. python小绵羊怎么画_使用Python的turtle画小绵羊
  11. educoder JAVA实训答案
  12. 杨辉三角相关性质以及组合数
  13. 2022-2027年中国小麦加工行业市场深度分析及投资战略规划报告
  14. influxdb java api使用_Influxdb入门使用
  15. Pycharm设置快捷键放大缩小字体
  16. 008.环形链表 II-双指针
  17. c语言中doubt和double,doubt的用法
  18. 读书笔记-袁腾飞讲高效学习法
  19. yum clean all的作用
  20. win7-64+usb安装

热门文章

  1. windows 软链接的建立及删除
  2. 从苏宁电器到卡巴斯基(第二部)第29篇:我当高校教师的这几年 V
  3. 非常详细的滤波器基础知识
  4. Error 1962:No operating system found. Boot sequence will automatically repeat.--解决办法
  5. 鸿蒙是另一种安卓吗,鸿蒙不是另一个安卓或者iOS!鸿蒙2.0上线倒计时
  6. 使用CNVkit进行CNV分析
  7. matlab 四叶草,Matlab入门教程 第七章 Simulink 基础
  8. pyecharts应用代码实例3-3:数据地图在线生成器【基于Streamlit的纯Python网站】
  9. 监督学习——支持向量机(Support Vector Machine--SVM)
  10. PHP date() 函数,time() 函数,NOW() 函数区别