华为机试-字符串运用密码截取

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

输入描述:

输入一个字符串

输出描述:

返回有效密码串的最大长度

示例1

输入

复制
ABBA

输出

复制
4

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String string = in.nextLine();
            int[] dp = new int[string.length()];
            for (int i = 0; i < dp.length; i++) {
                dp[i] = 1;
            }
            for (int i = 1; i < string.length(); i++) {
                int left = i-1;
                int right = i;
                while (left >= 0 && right < string.length()) {
                    if (string.substring(left, left+1).equals(string.substring(right,right+1))) {
                        left--;
                        right++;
                        if (right - left - 1 > dp[i]) {
                            dp[i] = right - left - 1;
                        }
                    } else {
                        break;
                    }
                }
                left = i-1;
                right = i+1;
                while (left >= 0 && right < string.length()) {
                    if (string.substring(left, left+1).equals(string.substring(right,right+1))) {
                        left--;
                        right++;
                        if (right - left - 1 > dp[i]) {
                            dp[i] = right - left - 1;
                        }
                    } else {
                        break;
                    }
                }
            }
            int max = 0;
            
            for (int i = 0; i < dp.length; i++) {
                //System.out.print(dp[i]+" ");
                if(dp[i] > max) {
                    max = dp[i];
                }
            }
            System.out.println(max);
        }
    }
}

思路:以选中字符为偶数或奇数回文的中心计算最大回文长度

猜你喜欢

转载自www.cnblogs.com/shineyoung/p/10566637.html