网易真题之暗黑字符串

题目如下:

字符串只包含‘A’,‘B‘,‘C‘,对于一个任意长度的字符串,如果存在连续的3个字符同时包含"A","B""C",那这个字符串是纯净的,否则称为暗黑字符串。比如“BCBBACBBCA”就是纯净字符串,“ABBAACCBBA”就是暗黑字符串。

input:一个整数,表示字符串的长度

output:暗黑字符串可能的个数

分析:

这种题目使用遍历或者排列组合求解,基本不可能,运算量巨大。可以通过查找关系,列出通项公式。

以f(n)表示n位字符串存在的暗黑字符串的个数,有以下关系:f(n)=f(n-2)*3+(f(n-1)-f(n-2))*2

代码如下:

package project001;

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

public class Main05 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
//        System.out.println(Rev(120));
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int a = in.nextInt();

            System.out.println(getN(a));
        }
    }

    public static long getN(int k){
        List<Long> list = new ArrayList<Long>();
        list.add((long) 3);
        list.add((long) 9);
        list.add((long) 21);
        for(int i=1;i<=k;i++){
            if(k<=3) break;
            list.add(3*list.get(list.size()-2)+2*(list.get(list.size()-1)-(list.get(list.size()-2))));
        }
        return list.get(k-1);
    }
}
时间: 2024-11-04 09:40:14

网易真题之暗黑字符串的相关文章

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

quna 笔试真题 字符串解压

quna 笔试真题 字符串解压 个人信息:就读于 燕大本科 软件工程专业 目前大四; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:Java ; 编程坏境:Windows 8.1 x64; 编程工具:eclipse; 制图工具:office 2007 powerpoint; 硬件信息:华硕X54HR 笔记本; 恋爱情况:处于被夺初吻的热恋中; 题目: 给出一个字符串如 a1b2c3ab10 将其

网易2017 暗黑字符串

一个只包含'A'.'B'和'C'的字符串,如果存在某一段长度为3的连续子串中恰好'A'.'B'和'C'各有一个,那么这个字符串就是纯净的,否则这个字符串就是暗黑的.例如: BAACAACCBAAA 连续子串"CBA"中包含了'A','B','C'各一个,所以是纯净的字符串AABBCCAABB 不存在一个长度为3的连续子串包含'A','B','C',所以是暗黑的字符串你的任务就是计算出长度为n的字符串(只包含'A'.'B'和'C'),有多少个是暗黑的字符串.  输入描述: 输入一个整数n

九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题

题目1165:字符串匹配 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2497 解决:858 题目描述: 读入数据string[ ],然后读入一个短字符串.要求查找string[ ]中和短字符串的所有匹配,输出行号.匹配字符串.匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配.如"aa[123]bb",就是说aa1bb.aa2bb.aa3bb都算匹配. 输入: 输入有多组数据. 每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(

第三届蓝桥杯 c/c++真题

第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多循环的只是,还有模拟,动态规划的只是. 其中做题过程中,也有了一些新的体会.起初做代码填空题的时候我没办法知道自己做的是对还是错,就跑到网上查答案,后来发现,题目已经给出了代码,起始我们可以自己加上头文件,然后把空缺的代码加上进行调试的,这样就可以验证自己补充的代码是否正确了. 此外在进行调试的时候

1054. 求平均值 (20)-PAT乙级真题

今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org/course/zju-93001#/info :然后就是跟着<算法之美>也要同步看完. 然后就在PAT上随便做一道题,这是第一次通过AC,发现了两个比较好的博客主页:http://www.liuchuo.net/  和  https://www.joyhwong.com/   都总结了刷题的过程

第四届蓝桥杯 c/c++真题

第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天.这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日. 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日. 高斯获得博士学位的那天日记上标着:

2005年华中科技大学计算机保研机试真题 找位置

题目1199: 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <vector> 5 using namespace std; 6 struct node{ 7 vector<int> v; 8 }; 9 node map['z'+1]; 10 int main(){ 11 string s; 12 while(cin>>s){ 13

九度oj 1032 ZOJ 2009年浙江大学计算机及软件工程研究生机试真题

题目1032:ZOJ 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4102 解决:2277 题目描述: 读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出. 输入: 题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束.1<=length<=100. 输出: 对于每组输入,请输出一行,表示按照要求处理后的字符串.具体可见样例. 样例输入: ZZOOOJJJ ZZZZOOOOO