zoukankan      html  css  js  c++  java
  • 【DFS】困难的串

    题目:  

      问题描述:如果一个字符串包含两个相邻的重复子串,则称它为容易的串,其他串称为困难的串。如:BB,ABCDACABCAB,ABCDABCD都是容易的,A,AB,ABA,D,DC,ABDAB,CBABCBA都是困难的。

      输入正整数L,n,输出由前L个字符(大写英文字母)组成的,字典序第n小的困难的串。
      例如,当L=3时,前7个困难的串分别为:A,AB,ABA,ABAC,ABACA,ABACAB,ABACABA。
      n 指定为4的话,输出ABAC。

    代码:  

     1 import java.util.Scanner;
     2 
     3 public class 困难的串 {
     4 
     5     public static void main(String[] args) {
     6 //        int n = 10;
     7 //        int L = 4;
     8         Scanner scanner = new Scanner(System.in);
     9         int L = scanner.nextInt();
    10         int n = scanner.nextInt();
    11         dfs(L, n, "");
    12         // isHard("0123020120",1);
    13     }
    14 
    15     static int count;
    16 
    17     private static void dfs(int l, int n, String prefix) {
    18 
    19         // 尝试在prefix后追加一个字符  难点一:维持字典序
    20         for (char i = 'A'; i < 'A' + l; i++) {
    21             if (isHard(prefix, i)) {// 是困难的串,就组合起来输出
    22                 String x = prefix + i;
    23                 //System.out.println(x);
    24                 count++;// 计数
    25                 if (count == n){
    26                     System.out.println(x);
    27                     System.exit(0);
    28                 }
    29 
    30                 dfs(l, n, x);
    31             }
    32         }
    33     }
    34 
    35     /**
    36      *  难点二:判断prefix+i是否一个困难的串
    37      *  1.遍历所有的长度为偶数的子串,看是否对称 
    38      *  2.prefix本身是一个困难的串 ABACA i 往后遍历逐步比较
    39      * @param prefix
    40      * @param i
    41      * @return
    42      */
    43     private static boolean isHard(String prefix, char i) {
    44         int count = 0;// 截取的宽度
    45         for (int j = prefix.length() - 1; j >= 0; j -= 2) {
    46             final String s1 = prefix.substring(j, j + count + 1);
    47             final String s2 = prefix.substring(j + count + 1) + i;
    48             if (s1.equals(s2))
    49                 return false;
    50             count++;
    51         }
    52         return true;
    53     }
    54 }

    结果:

      

  • 相关阅读:
    php 请求另一个服务器接口返回数据
    yii2 安装
    无限分类的
    程序员学习能力提升三要素转载
    为什么有的人工作多年还是老样子
    随笔杂谈
    Ecshop商品描述上传中文名图片无法显示解决方法
    「PSR 规范」PSR-2 编码风格规范
    leetcode 之Set Matrix Zeroes(10)
    leetcode 之Plus One(9)
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/10348164.html
Copyright © 2011-2022 走看看