最右的一道面试算法题,--特殊基因

题目描述

小右发现某种特殊基因片段可以使人类拥有某种超能力,比如飞翔,隐身,时光倒流等等;他想找到拥有这些超能力的人。一个人要想拥有超能力当且仅当他的基因编码里包含至少一个特殊基因片段作为子串。请编写程序帮助小右解决这个问题。


输入描述:
第一行包括一个整数N,表示特殊基因片段的数量,接下来的N行里每行包含一个字符串,表示一个特殊基因片段的编码;再接下来的一行输入一个整数M,表示多少个人要被检查,接下来M行里每行有一个字符串代表一个人的基因编码;

输出描述:
对于每个人,判断他是否拥有超能力,如果他拥有超能力,则输出一行“A new hero discovered”;否则输出一行“Just an ordinary person”.

示例1
2
ATA
ATC
3
ACATAG

AATTCCGG

ATCGGATACG

输出:

A new hero discovered

Just an ordinary person

A new hero discovered

解题代码:

package com.qcby.zuiyou;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class SpecificGenes {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N=in.nextInt();//输入特殊基因片段的个数
        List<String> genes=new ArrayList<>();
        List<String> perGenes=new ArrayList<>();
        int n=N;
        while (N>0){
            String gen = in.next();
            genes.add(gen);
            N--;
        }
        int M= in.nextInt();//要进行测试的人员的数量
        int m=M;
        while (M>0){
            String perGen= in.next();
            perGenes.add(perGen);
            M--;
        }

        int[] arr=new int[n*m];
        int index=0;
        for (String pergens:perGenes){
            for(String gen:genes){
               arr[index]= findSpecificPeo(pergens,gen);
               index++;
            }
        }
        for (int i=0;i< arr.length-1;i+=2){
            if (arr[i]==1||arr[i+1]==1){
                System.out.println("A new hero discovered");
            }else {
                System.out.println("Just an ordinary person");
            }
        }

    }
    public static int findSpecificPeo(String str1,String str2){
        char[] chars1 = str1.toCharArray();
        char[] chars2 = str2.toCharArray();
        int n1=chars1.length;
        int n2=chars2.length;
        int i=0,j=0;
        while (i<n1){
            if (chars1[i]==chars2[j]){
                if (j>=n2-1){
                    return 1;
                };
                i++;
                j++;

            }else {
                i++;
                j=0;
            }
        }
        return 0;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值