zoukankan      html  css  js  c++  java
  • 华为机试-字符串运用密码截取

    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);
            }
        }
    }

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

  • 相关阅读:
    常用正则表达式
    java中的异或运算
    Eclipse 中,web项目在Tomcat运行时填写不了Server name
    错误: 找不到或无法加载主类 tomcat-juli.jar
    Hadoop学习之Ubuntu12.04 Hadoop 环境搭建笔记
    ubuntu安装 cober 笔记
    Ubuntu中安装JDK
    对象调用很容易忽视的地址问题
    2018.09.27_练习时的tips
    网页的组成(一)
  • 原文地址:https://www.cnblogs.com/shineyoung/p/10566637.html
Copyright © 2011-2022 走看看