【华为oj】密码截取(字符串对称)

描述

Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?

样例输入:

ABBA

12ABBA

A

ABAKK

51233214

abaaab

样例输出:

4

4

1

3

6

5

可以使用中提供的库函数。

实现接口,每个接口实现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;
	}
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值