zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法训练 单词接龙

    问题描述

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

    输入格式

    输入的第一行为一个单独的整数n (n<=20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.

    输出格式

    只需输出以此字母开头的最长的“龙”的长度

    样例输入
      5
      at
      touch
      cheat
      choose
      tact
      a
    样例输出
    23
    样例说明
      连成的“龙”为atoucheatactactouchoose

    import java.util.Scanner;
    
    
    public class 单词接龙 {
    	private static int n=0,max=0;
        private static String a[];
        private static int visit[];
        private static String s1,s,tmp;
        private static char st;
        public static void main(String[] args) {
            Scanner 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];
            sc.close();
            for (int k = 0; k < a.length; k++) {
                if (findS1(a[k])) {
                    dfs(s1); 
                }
            }
            System.out.println(max);
        }
        public static void dfs(String ss){
            String temp="";
            temp=ss;
            if (max<=ss.length()) {
                max=ss.length();
            }
                    for (int i = 0; i < a.length; i++){ 
                        if (visit[i]<2&&checkString(ss,a[i] )&&contact(ss, a[i])) {
                            visit[i]++;
                            ss=tmp;
                            dfs(ss);
                            ss=temp;
                            visit[i]--;
                        }
                    }
    
    
        }
        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++) {
                if(s11[s11.length-1]==s22[j]){ 
                    for (int k1 = s11.length-1,k2=j; k1 >=0&&k2>=0; k1--,k2--) {
                        if (s11[k1]!=s22[k2]){
                            return false;
                        }
                      if (k2==0) {
                            b=b.substring(j+1);
                            tmp=a+b;
                            return true;
    
                        }
                    }
                }
            }   
    
            return false;
        }
        public static boolean checkString(String a,String b) {
            //相同的单词居然不算包含。。。快被玩坏了
            String 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 findS1(String a){
            char ss[]=a.toCharArray();
            if(ss[0]==st){
                s1=a;
            return true;
            }
            else {
                return false;
            }
        }
    
    }
    
    
  • 相关阅读:
    168. Excel Sheet Column Title
    171. Excel Sheet Column Number
    264. Ugly Number II java solutions
    152. Maximum Product Subarray java solutions
    309. Best Time to Buy and Sell Stock with Cooldown java solutions
    120. Triangle java solutions
    300. Longest Increasing Subsequence java solutions
    63. Unique Paths II java solutions
    221. Maximal Square java solutions
    279. Perfect Squares java solutions
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078586.html
Copyright © 2011-2022 走看看