【问题标题】:Calculating permutations of a String where preceding characters matter计算前面字符很重要的字符串的排列
【发布时间】:2015-09-10 23:38:41
【问题描述】:

我有一个初始字符串: BBBCCC.

B is +1C is -1 在哪里

规则:如果B's and C's前面的累积值会导致负数,则不能放置C

例如,BCCBBC 无法工作,因为我们有 +1 - 1 (0) -1 (-1) +1 (0) +1 (1) -1 (0),因为它在累积期间会导致负数。

这意味着接受的排列如下:

BBBCCC BBCBCC BBCCBC BCBBCC BCBCBC

我对代码有一些想法,但不确定使用给定的N 初始Bs 计算字符串是什么好方法。

我正在尝试在 Java 中实现它。

到目前为止我所拥有的:

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    private static ArrayList<String> pathPermutations = new ArrayList<String>();

    public static void main(String[] args) {
        int numToEnter;
        Scanner myScanner = new Scanner(System.in);
        System.out.println("Enter a node: ");
        numToEnter = myScanner.nextInt();
        calculatePermutations(numToEnter);
    }


    public static void calculatePermutations(int nodeNum){
        pathPermutations.clear();
        pathPermutations.add(constructInitialPath(nodeNum));

        System.out.println(pathPermutations.get(0));
    }
    public static String constructInitialPath(int nodeNum){
        String pathString = "";
        for(int i = 0; i<nodeNum*2;i++){
            if(i<nodeNum){
                pathString+="B";
            }else{
                pathString+="C";
            }
        }
        return pathString;
    }

    public void populatePermutations(String s){
        int length = s.length()/2;
        int accumulator = 0;
        int nodeIntercepts = 0;
        String newPermutation = "";
        for(int i = 0; i<length*2;i++){
            if(i==0){
                newPermutation+="B";
                accumulator++;
            }else if(i>0 && accumulator>){

            }
        }


    }
}

如何操纵populatePermutations 方法以获取BBBCCC 的初始字符串(或N 个任意数量的B/C 排序)并根据我之前所述的规则递归计算子字符串。

例如:

第 1 步。BBBCCC 第二步。BBCBCC等。

【问题讨论】:

  • 在那里我添加了我所做的尝试。我正在尝试接收一个初始字符串并通过操纵该初始字符串并根据我之前所述的规则创建排列来对字符串的ArrayList 进行一些填充。
  • 你的代码有“E”和“S”,但你的描述有BC。而且仍然没有任何问题。
  • 我已经改变了。如果你愿意检查一下。我的问题是,通过实现初始字符串并根据我之前所说的计算所有子字符串来操作 populatePermutations 方法的好方法是什么。
  • 对于这种逻辑,你需要一个recursive method
  • 把你的问题放到问题里,不是评论。

标签: java string logic permutation


【解决方案1】:

你需要一个递归方法。该方法将到目前为止构建的字符串、迄今为止的字母总和以及目标长度作为参数。

  • 如果达到目标长度,打印结果并返回。
  • 附加一个 +1 字母,然后调用它自己。
  • 如果允许,附加一个 -1 字母,然后调用自身。

或者不是目标长度,而是要附加的 +1 和 -1 字母的数量。

【讨论】:

  • 我们是否必须附加字母,或者我们是否会在字符串的字符数组中操作字母位置?
  • 啊,我明白了。我会试试看。
  • 我想我很困惑的是,我们不是使用我们的初始字符串BBBCCC 作为基本参数输入到我们的递归方法调用中吗?
  • 您并不关心初始字符串是BBBCCC 还是BCCBBC 还是CCCBBB,只要B 的数量至少与C 一样多s。数一数,验证countB &gt;= countC,然后用permutate("", 0, countB, countC)开始递归。
  • 啊,我明白了。如果我成功了,我会试试这个并回帖。感谢您的帮助。
猜你喜欢
  • 2011-04-15
  • 2016-08-25
  • 1970-01-01
  • 2017-05-30
  • 2019-09-14
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多