华为OD机试 密码截获(C/JAVA)

打印 上一主题 下一主题

主题 1910|帖子 1910|积分 5730

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
形貌
Catcher是MCA国的谍报员,他工作时发现敌国会用一些对称的密码进行通信,好比像这些 “ABBA” 、“ABA”、“A”、“123321”。
但是他们有时会在开始或竣事时加入一些无关的字符以防止别国破解。好比进行下列变革
“ABBA"→"12ABBA”、“ABA"→"ABAKK”,“123321"→"51233214”。由于截获的串太长了,而且存在多种大概的情况( "abaaab"可看作是 "aba"或 “baaab”
的加密形式),Cathcer的工作量着实是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
输入形貌:
在一行上输入一个长度为1≦length(s)≦2500 ,仅由巨细写字母和数字构成的字符串s,代表截获的密码。
输出形貌:
在一行上输出一个整数,代表最长的有效密码串的长度。
示例1
   输入:ABBA
输出:4
阐明:在这个样例中,没有无关字符,所以最长的有效密码串就是 “ABBA” 自己,长度为 4 。
  示例2
   输入:
12HHHHA
输出:4
阐明:在这个样例中,最长的有效密码串是 “HHHH” ,长度为 4 。
  Java算法源码
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.List;
  4. import java.util.Scanner;
  5. public class Main {
  6.         public static void main(String[] args) {
  7.                 Scanner in = new Scanner(System.in);
  8.                 String s = in.next();
  9.                 int count = 0; // 满足条件的子字符串的长度
  10.                 List<Integer> l = new ArrayList<Integer>(); // 存储遍历过程中的长度
  11.                 if (s.length() == 1) { // 边界值处理
  12.                         System.out.println(1);
  13.                 } else if (s.length() == 2) {
  14.                         if (s.charAt(0) == s.charAt(1)) {
  15.                                 System.out.println(2);
  16.                         } else {
  17.                                 System.out.println(1);
  18.                         }
  19.                 } else {
  20.                         for (int i = 0; i < s.length(); i++) { // 双指针遍历字符串
  21.                                 for (int j = s.length() - 1; j >= i; j--) { // 参数j要满足条件j > i;一是防止substring()方法出错;
  22.                                                             // 二是节省时间,因为i= 1,j = 5和i = 5,j = 1区间的子字符串是同一个
  23.                                        
  24.                                         if (s.charAt(i) == s.charAt(j) && isPalindromic(s.substring(i, j + 1))) {
  25.                                                 count = j - i + 1; // 存储本次遍历过程中满足条件的子字符串的长度
  26.                                                 l.add(count); // 将长度添加到集合l中
  27.                                         }
  28.                                 }
  29.                         }
  30.                         Collections.sort(l);
  31.                         System.out.println(l.get(l.size() - 1));
  32.                 }
  33.         }
  34.         // 判断字符串s是否为回文字符串
  35.         public static boolean isPalindromic(String s) {
  36.                 if (s == null) {
  37.                         return false;
  38.                 }
  39.                 for (int i = 0, j = s.length() - 1; j > i; i++, j--) {
  40.                         if (s.charAt(i) != s.charAt(j)) {
  41.                                 return false;
  42.                         }
  43.                 }
  44.                 return true;
  45.         }
  46. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表