【华为oj】密码截取(字符串对称)
2015-08-06 16:00
405 查看
描述 | Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗? 样例输入:ABBA12ABBAAABAKK51233214abaaab样例输出:441365可以使用中提供的库函数。实现接口,每个接口实现1个基本操作:voidGetCipherMaxLen(characCipherContent[],int *piCipherLen):acCipherContent是一个字符串数组常量,见参考用例;piCipherLen为输出有效密码串的最大长度;题目框架中有2个参考用例,其它用例请执行编写。 |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入一串字符 |
输出 | 输出有效长度 |
样例输入 | ABBA |
样例输出 | 4 |
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); String str = cin.nextLine(); int len=MaxLength(str); System.out.println(len); cin.close(); } private static int MaxLength(String str) { // TODO Auto-generated method stub if(str==null||str.length()==0) { return -1; } int symLen=1; char[] letter=str.toCharArray(); int strLen=str.length(); int curIndex=1; while(curIndex>0&&curIndex<strLen-1) { //odd symmetrical length,the 'pivot' char is letter[curIndex] int i=curIndex-1; int j=curIndex+1; while(i>=0&&j<=(strLen-1)&&letter[i]==letter[j]) { i--; j++; } int newLen=j-i-1; if(newLen>symLen) { symLen=newLen; } //even symmetrical length,the 'pivot' chars are letter[curIndex] and letter[curIndex+1] i=curIndex; j=curIndex+1; while(i>=0&&j<=(strLen-1)&&letter[i]==letter[j]) { i--; j++; } newLen=j-i-1; if(newLen>symLen) { symLen=newLen; } curIndex++; } return symLen; } }
相关文章推荐
- 动态规划(dp) 之 状态转移方程
- 经典makefile例子
- python中__new__ 的作用
- 51Nod_1066Bash游戏
- ajax 多级联动 下拉框 Demo
- 域组策略禁止执行指定软件
- Ajax知识点复习
- bootstrap基本CSS Class
- MediaScanner与音乐信息扫描==
- jQuery中offset和position方法
- android系统自带的主题与样式(theme and style)
- 如何在PowerPoint2013中添加文本框和设置文本ppt课件
- 文件、目录加密解密
- jQuery操作Class
- 底部导航栏点击跳转fragment
- Unable to install breakpoint in XXX due to missing line number attributes.
- 线程安全与并发探究(五)
- opencv vs2008
- CMap
- C# 类型和变量