英雄会上的一些题

python爬取lol所有英雄皮肤和英雄的语音包 打开wegame想来把lol的阿卡丽,之前因为the thy 才喜欢上玩这个人物,忽然发现wegame跳出一个页面,我记得以前一直没有,估计是更新了吧 看到时间我惊呆了,没想到lol陪伴了我这么久了,1848天了,大概5年了,忽然想起了渣渣辉了,哈哈,看到里面的英雄一个个那么熟悉还有那绚丽的皮肤,有很多已经下线了,所以我就写了一个脚本,爬取所有的皮肤图片保存起来,顺便还爬取了每个英雄的语音包,哈哈,算是意外收获了 皮肤: 每个英雄的皮肤都保存在一个文件夹,然后把所有的文... 阅读详情

第五届在线编程大赛月赛指定题目:反向互补子串
返回首页

题目详情

这是个字符串问题。我们的字符串只包含大写字母。我们定义一个字母和它13位以后的字母互补。即A与N互补,B与O互补,C与P互补……,我们需要找一个字符串的两个不重叠的子串,其中一个和另外一个的翻转全互补。另外,因为我们的问题来自生物学,所以我们允许这两个字符串的一个可以删掉两个字符(注意:仅允许一个字符串删掉任意位置的两个字符,另外一个必须全部互补上)。我们的目的是求最长的反向互补子串的长度。

输入格式:

多组数据,每组数据一行,有一个字符串。每个字符串长度不超过2000,只有大写英文字母组成。

输出格式:

每组数据输出一行包含一个整数,表示最长的反向互补子串长度。

答题说明


输入样例

ABCD

ABCDQOPN

ABON

输出样例:

0

2

2

解释:

第一个样例,没有互补的子串。

第二个样例,AB和NO互补,所以反向互补子串的时候我们可以选择NPO,删掉一个P即可。

第三个样例,AB与ON反向互补。


//代码仅供参考,请勿抄袭,尊重原创作者AimAtFuture, 3Q
import java.util.*;

public class ReverseComplementarySubstring{
    public static void main(String[] args) throws Exception{
        Scanner inputer = new Scanner(System.in);     
        while(inputer.hasNext())
        {  
            String str = inputer.next();  
            System.out.println(maxLenOfReverseComplementarySubStr(str));
        }
        inputer.close();    
    }

    private static int maxLenOfReverseComplementarySubStr(String str){
        int max_len = 0;
        HashMap<Character, Vector<Integer>> englishAlphabetsHM = convertStr2HM(str);
        Object[] englishAlphabetss = englishAlphabetsHM.keySet().toArray();
        for (int i = 0; i < englishAlphabetss.length; i++){
            if ((Character)englishAlphabetss[i] >= 'N'){
                continue;
            }

            Vector<Integer> englishAlphabetsIndexes = englishAlphabetsHM.get(englishAlphabetss[i]);
            Character hbenglishAlphabets = complementaryEnglishAlphabetsMapFunc((Character)englishAlphabetss[i]);
            Vector<Integer> hbenglishAlphabetsIndexes = englishAlphabetsHM.get(hbenglishAlphabets);
            if (null == hbenglishAlphabetsIndexes){
                continue;
            }else if (max_len < 1){
                max_len = 1;
            }

            int englishAlphabetsIndexesLen = englishAlphabetsIndexes.size();
            int hbEnglishAlphabetsIndexesLen = hbenglishAlphabetsIndexes.size();
            for (int j = 0; j < englishAlphabetsIndexesLen; j++){
                int j_index = englishAlphabetsIndexes.get(j);
                for (int k = 0; k < hbEnglishAlphabetsIndexesLen; k++){
                    int k_index = hbenglishAlphabetsIndexes.get(k);
                    if (k_index-j_index+1>=2*(max_len+1) || j_index-k_index+1>=2*(max_len+1)){
                        if (k_index>j_index){
                            max_len = maxSupLenOfSubString(str, j_index, k_index, max_len);
                        }else{
                            max_len = maxSupLenOfSubString(str, k_index, j_index, max_len);
                        }    
                    }                    
                }
            }
        }
        return max_len;        
    }

    private static int maxSupLenOfSubString(String str, int start_pos, int end_pos, int max_len){
        int condition = (end_pos-start_pos+1)/2;
        while (condition > max_len){
            String strA1 = str.substring(start_pos, start_pos+condition);
            int tmp_index1 = end_pos+1-condition-2;
            if (start_pos+condition > tmp_index1){
                if (start_pos+condition < end_pos+1-condition-1){
                    tmp_index1 = end_pos+1-condition-1;
                }else{
                    tmp_index1 = start_pos+condition;
                }
            }
            String strB1 = str.substring(tmp_index1, end_pos+1);
            if (isComplementTwoString(strA1, strB1)){
                max_len = condition;
                break;
            }
            
            int tmp_index2 = start_pos+condition+2;
            if (end_pos+1-condition < tmp_index2){
                if (end_pos+1-condition > start_pos+condition+1){
                    tmp_index2 = end_pos+1-condition-1;
                }else{
                    tmp_index2 = end_pos+1-condition;
                }
            }
            String strA2 = str.substring(start_pos, tmp_index2);
            String strB2 = str.substring(end_pos+1-condition, end_pos+1);
            if (isComplementTwoString(strA2, strB2)){
                max_len = condition;
                break;
            }
            condition--;
        }
        
        return max_len;
    }
    
    private static HashMap<Character, Vector<Integer>> convertStr2HM(String str){
        HashMap<Character, Vector<Integer>> ans = new HashMap<Character, Vector<Integer>>();
        int len = str.length();
        for (int i = 0; i < len; i++){
            Vector<Integer> tmp = ans.get(str.charAt(i));
            if (null == tmp){
                tmp = new Vector<Integer>();
            }
            tmp.add(i);
            ans.put(str.charAt(i), tmp);            
        }
        return ans;
    }

    // the different value of the lengths of strA and strB can not more than 2
    private static boolean isComplementTwoString(String strA, String strB){
        boolean ans = true;

        if (strB.length() > strA.length()){
            String tmp = strA;
            strA = strB;
            strB = tmp;
        }

        int a_len = strA.length();
        int b_len = strB.length();

        int max_diff = a_len - b_len;
        int diff = 0;
        for (int i = 0; i < a_len; i++){
            if (b_len-1-i+diff >= 0){
                if (strA.charAt(i) != complementaryEnglishAlphabetsMapFunc(strB.charAt(b_len-1-i+diff))){
                    diff++;
                }
            }

            if (diff > max_diff){
                ans = false;
                break;
            }
        }

        return ans;
    }

    private static char complementaryEnglishAlphabetsMapFunc(char englishAlphabets){
        char ans = (char)(englishAlphabets + 13);
        if (englishAlphabets - 'A' >= 13){
            ans = (char)(englishAlphabets - 13);
        }

        return ans;
    }
}    


《英雄编程体验课》第 02 课 | 开始刷题 02 函数 阅读详情

相关推荐

Dual-stream multiple instance learning networks for tumor detection in Whole Slide Image——论文笔记

关于多示例学习的资料网上比较少,但是在医学图像方面还是有人在应用的。主要是因为一般比较大,几个G都是十分常见的,这么大图片是无法直接训练,一般都会进行切图,所以天然契合多示例学习bag和instance的概念。最近看了一篇论文刚好关于这方面的,所以做下笔记。 github地址:https://github.com/binli123/dsmil-wsi paper:https://arxiv.org/abs/2011.08939 背景知识 在多示例学习(MIL)中,一组训练样本被视为包含多个instance的

weixin_41693877的博客 4170

待解决的英雄会上的一些题

AB串 返回首页 发布公司: 有 效 期: 优快云 2014-05-29至2015-05-29 难 度 等 级: 答 题 时 长: 编程语言要求: 120分钟 C C++ Java C# 题目详情 给定n个A和2n个B,用这些字符拼成一个字符串,要求这个串的所有前缀和后缀B的个数始终不少于A。 (一个字符串

AimAtFuture的专栏 903

微机原理-基于8086电压报警2.5V仿真系统设计

*单片机设计介绍,微机原理-基于8086电压报警2.5V仿真系统设计。

2201_75940997的博客 1082

优快云英雄会上会英雄

4月6日参加了优快云的英雄会,这是优快云精心组织的一次网友及业内专家的聚会,声势颇为浩大。早早到达会场,首先遇到的是ITPUB的叶开同学,叶开是咨询顾问,给了我很多有益的建议,包括写作及出版,他的建议使我下定决心再写一本书,面向另外一个细分读者市场。晚一点,见到了Fenng,他来北京是带着一堆任务来的,据说还要托运东西回杭州,真是够忙的:),不过拿一本我的书的愿望是顺利完成了:)F

eygle's life 5087

立创开源TinyAWG:基于ZYNQ7010的35MHz带宽200MSa/s任意波形发生器设计与实现

本文详细解析了立创开源TinyAWG的设计与实现,这是一款基于ZYNQ7010芯片的低成本高性能任意波形发生器。项目实现了35MHz带宽和200MSa/s采样率,核心采用ARM+FPGA协同架构,FPGA负责高速DDS信号生成,ARM运行Linux并搭载LVGL图形界面。文章涵盖了硬件选型、电路设计、软件逻辑及性能测试,为复刻和学习ZYNQ系统设计、高速DAC应用提供了完整参考。

weixin_42576467的博客 433

OS实验xv6 6.S081 开坑

OS实验xv6 6.S081 开坑 终于把xv6 2019 6.S081做完了,网络部分没有写,因为有计网实验了。怎么说呢,xv6的坑有点多,能做完多亏了:和我同学ljj交流,参考RedemptionC老哥的博客(他写的非常详细,遗憾的是,他好像没有写mmap),再者就是参考这位老哥的做法(没有源码,写得不是特别详细,不过有借鉴作用,mmap就是借鉴了他的思想)……废话不多说了,直接开始。 实验指导 首推RedemptionC的博客 这位老哥的个人博客 xv6 6.S081官网(后面的实验都要参考官网

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 4493

万人千题 | 九日集训 | 英雄算法联盟合伙人 | 三年之约 | B站直播早起粉丝团

万人千题

英雄哪里出来 9602

不用写触发器!帆软填报报表自动记录创建/修改时间的终极方案

本文详细介绍了帆软填报报表中无需编写数据库触发器,即可自动记录数据创建时间和修改时间的终极方案。该方案利用帆软内置函数和单元格条件属性,在应用层实现日期自动生成,有效规避了触发器带来的权限、维护和部署难题,为数据填报提供了更轻量、灵活且易于维护的解决方案。

weixin_28040125的博客 358

30行代码爬取英雄联盟全英雄皮肤

距离上次写爬虫文章已经过了许久了,之前写过一篇20行Python代码爬取王者荣耀全英雄皮肤 ,反响强烈,其中有很多同学希望我再写一篇针对英雄联盟官网的皮肤爬取,但苦于事情繁多,便一拖再拖,一直拖到了现在,那么本篇文章我们就一起来学习一下如何爬取英雄联盟全英雄皮肤。 爬取代码非常简单,从上到下可能只需要写30行左右就能完成,但重要的是分析过程,在此之前,我们先来了解一下本篇文章需要用到的模块。 requests模块介绍 首先是requests模块,这是一个模拟浏览器请求的模块,我们可以通过它来获取网页上的信息

。。。 2万+

硬件工程师笔记——三极管Multisim电路仿真实验汇总

NPN型三极管:由N型半导体、P型半导体和N型半导体组成,即NPN结构。 PNP型三极管:由P型半导体、N型半导体和P型半导体组成,即PNP结构。 三极管的工作原理基于电流的控制和放大,其核心是基区对电流的控制作用。 将三极管等效为两个串联的二极管进行等效分析

XU157303764的博客 2635

RT-DETR 模型剪枝优化:结构化剪枝对 R18/R50 性能的影响

本文提出分层结构化剪枝策略R18:参数量减少 42%(28M→16.2M),推理速度提升 35%(15→20.3 FPS@Jetson Nano),mAP@0.5 仅降 1.2%;R50:参数量减少 55%(170M→76.5M),推理速度提升 48%(42→62.2 FPS@T4),mAP@0.5 仅降 2.1%。核心价值:为 RT-DETR 提供“精度-效率-部署”平衡的轻量化方案,推动其在边缘设备、工业质检等场景的大规模落地。部署建议。

走向CTO的路上... 464

Python | 用Python爬取LOL所有的英雄信息以及英雄皮肤

使用Python爬取英雄联盟所有的英雄信息以及英雄皮肤,简单几行代码即可实现爬虫

杰森写代码 4086

南 京 农 业 大 学 试 题 纸 附表(rape.csv)是25个油菜材料,测得每个材料的千粒重、亚油酸等的含量. (1) 对物质含量的八个指标作主成分分析,画出碎石图和主成分得分图; (2) 选

(1)请用n1

Mrrunsen的博客 497

英雄联盟英雄信息【python爬虫】

Python爬虫实战对LOL的英雄信息抓取。什么是ajax数据爬取:通常我们在requests抓取页面的时候,得到的html源码可能和在浏览器中看到的不一样,在页面上则可以看到数据,这是因为数据是听过ajax异步加载的,原始页面不会包含某些数据,原始页面加载完之后,会向服务区请求某个接口获取数据,然后数据才会被呈现在页面上,这其实就是发送了一个ajax请求。

flyskymood的博客 2503

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python爬取英雄联盟手游的全英雄皮肤 初识selenium

python爬取英雄联盟手游的全英雄皮肤前言分析页面 前言 近期这个鸽了好久的英雄联盟手游终于上线了,虽然博主不是英雄联盟端游玩家,但看到这个游戏上线还是超级开心的,受到了一些博主爬王者荣耀皮肤的启发,我们来试试爬英雄联盟的皮肤图片吧。 分析页面 来到英雄联盟手游的官网,我们来看看这个英雄列表的展示形式吧 ...

就很有趣的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【C语言】英雄联盟英雄查询系统(源码)

【C语言】英雄联盟英雄查询系统 模拟模拟~~~ 程序介绍:【C语言】英雄联盟英雄查询系统 /*---------------------------------- project :英雄联盟英雄查询系统 author : LLZ tool man: xy finish : 2019/12/26 ----------------------------------*/ /*----------------------------- ⊙注意事项!!!! 为了用C语言实现文件的读写 程序读取数据

404name的博客 4477

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python爬虫入门之爬取英雄联盟官网的所有英雄数据

本文是Python学期实训时所写的爬虫项目,在这里分享给你,希望能对你有所帮助。 文章目录   爬虫目的分析      网页内容介绍 网页内容介绍   英雄联盟官方网址:  英雄联盟全新官方网站-腾讯游戏   英雄数据信息网址: https://lol.qq.com/data/info-heros.shtml 如果觉得本文写的还不错的话,求赞、求收藏、求关注、求转发、最重要的是给小博主点个大大的订阅,你的鼓励就是我前进的最大动力,我们下期再见。 ...

qq_46127034的博客 1万+

Python爬英雄联盟lol全英雄皮肤

先看效果展示: 上代码xxx.py # 1.导入所需模块 import requests import os # 创建lol文件夹 #os.mkdir("lol") # 2.读取js文件,获取英雄id(hero_id) url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js' headers = {'U...

臭小子的博客 4613
上一篇: 待解决的英雄会上的一些题
下一篇: 大数据时代的生物医学
Jun-H
博客等级 码龄16年 123粉丝 61原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jun-H

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值