相关疑难解决方法(0)

生成给定字符串的所有排列

找到字符串的所有排列的优雅方法是什么.是的ba,会是baab,但是怎么样abcdefgh?是否有任何Java实现示例?

java algorithm

404
推荐指数
13
解决办法
54万
查看次数

给定字符串的所有可能排列?

我将如何在Ruby中执行此操作?

p "abc".all_possible_permutations
Run Code Online (Sandbox Code Playgroud)

会回来:

[
  "abc",
  "acb",
  "bca",
  "bac",
  "cba",
  "cab",
]
Run Code Online (Sandbox Code Playgroud)

编辑

感谢Jakub Hampl:

class String
  def all_possible_permutations
    self.chars.to_a.permutation.map(&:join)
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby

25
推荐指数
3
解决办法
1万
查看次数

从阵列到特定长度的所有可能字符串组合的算法

从给定数组中获取具有最小和最大长度值的所有可能字符串组合的最佳算法是什么.

注意:这增加了复杂性,因为值是可变的,与这些链接的问题不同.

例如:

$letters = array('a','b','c','1','2','3');
$min_length = 1;
$max_length = 4;

a
b
c
1
2
3
.
.
.
aaaa
a123
b123
c123
Run Code Online (Sandbox Code Playgroud)

php arrays algorithm combinations

20
推荐指数
5
解决办法
9574
查看次数

计算F#中的排列

受这个问题答案的启发,如何在F#中创建通用排列算法?谷歌没有给出任何有用的答案.

编辑:我在下面提供了我最好的答案,但我怀疑Tomas的更好(当然更短!)

algorithm f# permutation

14
推荐指数
2
解决办法
5394
查看次数

如何获得所有可能的3个字母排列?

可能重复:
列出字符串/整数的所有排列

例如,

aaa .. aaz .. aba .. abz .. aca .. acz .. azz .. baa .. baz .. bba .. bbz .. zzz
Run Code Online (Sandbox Code Playgroud)

基本上,想象计算二进制,但不是从0到1,它从a到z.

我一直试图让这个工作几个小时现在无济于事,公式变得非常复杂,我不确定是否有更简单的方法来做到这一点.

谢谢阅读.

编辑:我现在有这样的东西,但它不是那里,我不确定是否有更好的方法:

private IEnumerable<string> GetWordsOfLength(int length)
{
    char letterA = 'a', letterZ = 'z';

    StringBuilder currentLetters = new StringBuilder(new string(letterA, length));
    StringBuilder endingLetters = new StringBuilder(new string(letterZ, length));

    int currentIndex = length - 1;

    while (currentLetters.ToString() != endingLetters.ToString())
    {
        yield return currentLetters.ToString();

        for (int i = length - 1; i > 0; …
Run Code Online (Sandbox Code Playgroud)

c# algorithm alphabetical

10
推荐指数
3
解决办法
2万
查看次数

并行算法产生一组的所有可能序列

在尝试生成给定字符集的所有可能字符串时,我遇到了困难.让我们S设置符号.我需要处理所有可能的S长度组合n.例如,如果S={'a','b','+','-'}n=4算法应该处理以下序列:

aaaa
aaab
abab
+aa-
// And all other sequences in the universe
Run Code Online (Sandbox Code Playgroud)

目前我的算法是下面描述的非有效递归算法.我有两个问题:

  1. 有更快的算法吗?
  2. 是否有并行算法来解决这个问题?

当前实施:(简化)

void workhorse(vector<char> &input, vector<char>::iterator i)
{
    if(i==inputs.end()) {
        // process the input
        return;
    }
    else {
        for( const auto& symbol : S) {
            *i=symbol;
            workhorse(input, i+1);
        }
    }
}   
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

5
推荐指数
1
解决办法
1015
查看次数

以各种方式替换字符串中的字符

我正在寻找一个带字符串的函数的帮助,并以各种方式替换该字符串中的每个字符.我不太确定如何说出我的问题,这样才有意义,所以我会告诉你它应该做什么.

stars('1')
returns ['*']

stars('12')
returns ['*1', '1*', '**']

stars('123')
returns ['*23', '1*3', '12*', '**3', '*2*', '**1', '***']

stars('1234')
returns ['*234', '1*34', '12*4', '123*', '**34', '*2*4', '*23*', '1**4', '1*3*', 
         '12**', '***4', '**3*', '*2**', '1***', '****']
Run Code Online (Sandbox Code Playgroud)

这一切都是手工完成的,但即使我犯了错误,你也应该明白我现在正在寻找什么.最后的情况(所有*)不是必需的,但我把它放在那里以确保问题得到理解.

这是我到目前为止所提出的,但它并没有完全奏效.

def stars(n):
    lst = []
    length = len(n)
    for j in xrange(0, length):
        p = list(n)
        for k in xrange(j, length):
            p[k] = '*'
            lst += [''.join(p)]
    return lst
Run Code Online (Sandbox Code Playgroud)

输出:

'1' returns ['*']
'12' returns ['*2', '**', '1*']
'123' returns ['*23', '**3', '***', …
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
1
解决办法
198
查看次数

获得每个字符串组合

我有一个组合学分配,涉及从特定的字符串组合中获取长度小于或等于6的每个单词.

在这种情况下,它是S = {'a','ab','ba'}.教授刚开始将它们列出来,但我认为通过一个程序可以更容易地解决它.唯一的问题是我无法获得一个实际计算每个可能选项的好算法.

如果有人可以提供帮助,我会很感激.我通常用Python编程,但实际上我只需要帮助算法.

python string combinatorics

3
推荐指数
2
解决办法
1万
查看次数

Java中没有重复的字符串的所有可能组合

我知道这个问题之前已经在stackoverflow上得到了解答 ,但是我要求这不要告诉我正确的代码,而是因为我想知道我做错了什么.


public static void printCombinations(String str){
    printCombinations(str, 0, str.length()-1);
}

public static void printCombinations(String str,int k,int n){
    if(k == n)
        System.out.println(str);
    else {
        for(int i=k;i<n;i++){
            String tmp=modifyString(str,i,k);
            printCombinations(tmp,k+1,n);
            modifyString(str,i,k);
        }
    }
}

public static String modifyString(String str,int x,int y){

            // for swapping characters inside a string 
    char arr[]=str.toCharArray();
    char t= arr[x];
    arr[x]=arr[y];
    arr[y]=t;

    String s= new String(arr);
    return s;   
}
Run Code Online (Sandbox Code Playgroud)

我把这个函数称为printCombinations(s).

java string

3
推荐指数
1
解决办法
5675
查看次数

具有给定char数组中所有可能组合/置换的暴力算法算法

需要帮助解决这个令我烦恼的简单事情.我已经看到了许多类似的算法,但我想以完全所述的方式来实现这一点,以在给定的字符集数组中达到所有可能的组合/置换.

让我们举个密码破解者暴力破坏者的例子

例如 char[] charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();

陈述方式:

就像这样.对于当前的例子.

a,b,c,d......z     then at last index "z".  

it goes like      

aa,ab,ac....az.        then      

ba,bb,bc,bd........bz          then

same for ca, cb, and so on.

aaaa,aaab,aaac......aaaz   then

baaa,baab,baac.......baaz   to      zzzzzzzzzzzzzzzzzzzzzzzzzz
Run Code Online (Sandbox Code Playgroud)

我到目前为止的代码:

(尽管不是解决方案)是拥有与charset数组长度一样多的for循环.那太疯狂了.这工作正常.但我需要聪明的一个.

public class Bruteforcer {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
          char[] charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();


         int currentIndex = 0;
         String currentString = "";

         for (int i = 0; i < charset.length; …
Run Code Online (Sandbox Code Playgroud)

java algorithm

2
推荐指数
1
解决办法
1万
查看次数

无法生成字符串的所有排列(迭代)

所以我正在进行一些Java练习,最近引起我注意的一个是尝试生成String使用迭代的所有排列.在线有很多例子 - 但是,很多例子看起来非常复杂,我无法遵循.

我尝试使用自己的方法,当使用长度为3的字符串进行测试时,它可以正常工作.方法是(对于每个字母)继续沿着字符串移动一个字母,用它前面的任何字母交换它.例如

index:  012
string: abc 

(iteration 1) swap 'a' (index 0) with letter after it 'b' (index 0+1) : bac
(iteration 2) swap 'a' (index 1) with letter after it 'c' (index 1+1) : bca
(iteration 3) swap 'a' (index 2) with letter after it 'b' (index 0)   : acb
current permutations: abc (original), bac, bca, acb

(iteration 3) swap 'b' (index 1) with letter after it 'c' (index 1+1) : acb
(iteration 4) swap …
Run Code Online (Sandbox Code Playgroud)

java string iteration algorithm permutation

2
推荐指数
1
解决办法
263
查看次数

什么算法能够高效地打印字符串的排列?

我知道的算法如下,但为什么我讨厌这种方法,它的时间复杂度是O((n + 1)!)在大字符串的情况下更糟糕

首先对字符串进行排序并将其打印为第一个排列.
现在,我们可以找到下一个排列如下:

让我成为输入[i] <input [i + 1]的最后一个索引.如果没有这样的索引,那么我们就完成了.令j为输入[i] <input [j]的最后一个索引.用输入[j]交换输入[i].通过输入[input.length - 1]反向输入[i + 1].

有没有比上面更好的方法?(如果通过代码解释那么请考虑c或c ++)...只是我期待一个更好的算法,时间复杂度比上面的更少

c c++ algorithm

1
推荐指数
1
解决办法
115
查看次数

排列和组合

我有一个程序,它创建一些字符串组合,如果我输入输入abc它给我输出为bca cab abc

#include<stdio.h>
#include<string.h>
int main()
{
    char str[15];
    int i,j,n;

    printf("Enter a string");
    scanf("%s",str);
    n=strlen(str);

    for(i=0;i<n;i++)
    {
        str[n]=str[0];

        for(j=0;j<n;j++)    
        {
            str[j]=str[j-1];
        }
    str[n]='\0';
    printf("\n %s \n",str);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我想要一个程序,它给了我所有可能的字符串组合,那么我需要做出哪些改变呢?

c

-5
推荐指数
1
解决办法
3172
查看次数