Java实现 蓝桥杯 算法提高VIP Substrings(暴力)

   日期:2020-04-29     浏览:118    评论:0    
核心提示:试题 算法提高 Substrings问题描述  You are given a number of java

试题 算法提高 Substrings

问题描述
  You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.
输入格式
  The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1 <= n <= 100), the number of given strings, followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string.
输出格式
  There should be one line per test case containing the length of the largest string found.
样例输入
2
3
ABCD
BCDFF
BRCD
2
rose
orchid
样例输出
2
2
试题来源
  Tehran 2002 Preliminary

PS:
这道题非常感谢网易词典,规避了我致命的英语

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        for (int i = 0; i < a; i++) {
            int n=sc.nextInt();
            String[]arr=new String[n];
            String mins="";
            int len = 101;
            int index=0;
            for (int j = 0; j < n; j++) {
                arr[j]=sc.next();
                int l = arr[j].length();
                if (l<len) {
                    len=l;
                    mins=arr[j];
                    index=j;
                }
            }
            for (int j = len; j >=0 ; j--) {
                boolean f=true;
                for (int k = 0; k +j<=len ; k++) {
                    boolean flag1=true;
                    boolean flag2=true;
                    //在最短的字符串里面寻找
                    String sub=mins.substring(k,j+k);
                    for (int l = 0; l < n; l++) {
                        if (l==index) {
                            continue;
                        }
                        //没有找到就换成下一个字符串去查
                        if (!arr[l].contains(sub)) {
                            flag1=false;
                            break;
                        }
                    }
                    //当前字符串如果每个都包含的话就可以退出去了
                    if (flag1) {
                        System.out.println(j);
                        f=false;
                        break;
                    }
                    String sub1=new StringBuilder(sub).reverse().toString();
                    for (int l = 0; l < n; l++) {
                        if (l==index) {
                            continue;
                        }
                        if (!arr[l].contains(sub1)) {
                            flag2=false;
                            break;
                        }
                    }
                    if (flag2) {
                        System.out.println(j);
                        f=false;
                        break;
                    }
                }
                if (!f) {
                    break;
                }
            }
        }
    }
}

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服