华为oj--字符串截取(最长回文字符串)

来源:互联网 发布:java验证码工具类 编辑:程序博客网 时间:2024/06/06 11:35

Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时

会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。

因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他

只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?

思路:本题实际上是求一个字符串中的最长回文字符串。要求最长回文字符串,则需要找到回文字符串的对称点,对于输入的字符

串的(每个字符)或者(该字符和其相邻字符)进行判断其是否是回文串的对称点,他们分别为回文串长度为奇数和偶数的情况,

即aba或者abba。

/** * 输入 输入一个字符串 * 输出 返回有效密码串的最大长度 * 样例输入 ABBA * 样例输出 4 */import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner scanner=new Scanner(System.in);    String s=scanner.next();    int t1=0;    int t2=0;    int temp=0;    int max=0;    for(int i=1;i<s.length()-1;i++){    t1=getLength(s,i,i);//回文串长度为奇数    t2=getLength(s,i,i+1);//回文串长度为偶数    temp=t1>t2?t1:t2;    if(max<temp){    max=temp;    }    }    System.out.println(max);}public static int getLength(String s, int i, int j) {int length=0;while(i>=0&&j<s.length()){if(s.charAt(i)==s.charAt(j)){if(i==j){length++;}else{length=length+2;}i--;j++;}else{break;}}return length;}}


0 0
原创粉丝点击