DNA序列

题目描述:

牛牛从生物科研工作者那里获得一个任务,这次牛牛需要帮助科研工作者从DNA序列s中找出最短没有出现在DNA序列s中的DNA片段的长度。

例如:s=AGGTCTA   序列s中包含了所有长度为1的('A','G','C','T')片段,但是长度为2的没有全部包含,例如序列中不包含"AA",岁哦一输出2.

输入描述:

输入包含一个字符串s,字符串长度length(1<=length<=2000),其中只包含'A','G','C',T'这四种字符。

输出描述:

输出一个正整数,即最短没有出现在DNA序列s中的DNA片段的长度。

错误思路:刚开始我没有完全理解题意,以为只要字符串中不包括连续的如"AA","GG","CCC","TTT"即输出。但其实在长度为2时,要考虑所有长度为2的情形:"AA","CC","GG","TT","AC","AG","AT","CG","CA","CT","GA","GC","GT","TA","TC","TG"等4*4=16个可能。只要有一个不满足,就输出2.

正确解法:对每个长度为i的字符串,我们可以用集合记录s中从下标0开始,长度为i出现的字符串,只要它的总个数小于4的i次方,就说明最短没有出现在DNA片段的长度为i。

import java.util.*;

public class Main {
 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s=sc.nextLine();
        int n=s.length();
        for(int i=1;i<=n;i++){
            HashSet<String> set=new HashSet<>();//对每个长度为i的字符串,定义一个集合用来存放s中所有出现的字符串。
            for(int j=0;j<n-i;j++){
                set.add(s.substring(j,j+i));
            }
            if(set.size()<Math.pow(4.0,i)){
                System.out.println(i);
                break;
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值