当前位置: 首页 > article >正文

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

描述
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算法源码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String s = in.next();
		int count = 0; // 满足条件的子字符串的长度
		List<Integer> l = new ArrayList<Integer>(); // 存储遍历过程中的长度
		if (s.length() == 1) { // 边界值处理
			System.out.println(1);
		} else if (s.length() == 2) {
			if (s.charAt(0) == s.charAt(1)) {
				System.out.println(2);
			} else {
				System.out.println(1);
			}
		} else {
			for (int i = 0; i < s.length(); i++) { // 双指针遍历字符串
				for (int j = s.length() - 1; j >= i; j--) { // 参数j要满足条件j > i;一是防止substring()方法出错;
                                                            // 二是节省时间,因为i= 1,j = 5和i = 5,j = 1区间的子字符串是同一个
					
					if (s.charAt(i) == s.charAt(j) && isPalindromic(s.substring(i, j + 1))) {
						count = j - i + 1; // 存储本次遍历过程中满足条件的子字符串的长度
						l.add(count); // 将长度添加到集合l中
					}
				}
			}
			Collections.sort(l);
			System.out.println(l.get(l.size() - 1));
		}
	}

	// 判断字符串s是否为回文字符串
	public static boolean isPalindromic(String s) {
		if (s == null) {
			return false;
		}
		for (int i = 0, j = s.length() - 1; j > i; i++, j--) {
			if (s.charAt(i) != s.charAt(j)) {
				return false;
			}
		}
		return true;
	}
}

http://www.kler.cn/a/452418.html

相关文章:

  • NNDL 作业11 LSTM
  • FFmpeg在python里推流被处理过的视频流
  • MyBatis如何处理延迟加载?
  • 三维扫描在汽车/航空行业应用
  • Java web的发展历史
  • C#中的委托机制:深入理解与应用
  • 基于earthSDK三维地图组件开发
  • vue.js 指令的修饰符
  • 16.2、网络安全风险评估技术与攻击
  • 解决Gradle下载很慢,运行及打包很慢
  • 在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题
  • 【ELK】ES单节点升级为集群并开启https【亲测可用】
  • 探索 Samba 服务器:搭建跨平台文件共享的桥梁
  • Converseen:全能免费批量图像处理专家
  • uniapp下拉选择组件
  • 金融租赁系统的发展与全球化战略实施探讨
  • 直连交换机简单应用
  • Docker 部署 SpringBoot VUE项目
  • STL heap原理和用法
  • js数字处理的相关方法