[关闭]
@yexiaoqi 2022-05-20T16:43:19.000000Z 字数 927 阅读 439

HJ32. 密码截取

刷题


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

输入描述:输入一个字符串(字符串的长度不超过2500)
输出描述:返回有效密码串的最大长度
示例1

输入:ABBA
输出:4

示例2

输入:ABBBA
输出:5

示例3

输入:12HHHHA
输出:4

链接https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1


题目废话太多,就是给一个字符串,求它的子串中最长回文串长度

  1. public class Main {
  2. public static void main(String[] args){
  3. Scanner in = new Scanner(System.in);
  4. while(in.hasNext()){
  5. String s = in.nextLine();
  6. int maxLen = 0;
  7. for(int i=0; i<s.length(); i++){
  8. for(int j=i+1; j<s.length(); j++){
  9. if(isBalance(s, i, j)){
  10. maxLen = Math.max(maxLen, j-i+1);
  11. }
  12. }
  13. }
  14. System.out.println(maxLen);
  15. }
  16. }
  17. //滑动窗口,在(i,j)范围内判断是否对称
  18. private static boolean isBalance(String s, int i, int j){
  19. while(i < j){
  20. //如果有一样的,向内收缩,继续判断里面的字符是否相等
  21. if(s.charAt(i) == s.charAt(j)){
  22. i++;
  23. j--;
  24. } else {
  25. return false;
  26. }
  27. }
  28. return true;
  29. }
  30. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注