7
votes

Toutes les ultérieures d'une chaîne de longueur n

Compte tenu d'une chaîne de longueur 'n'. Comment puis-je obtenir toutes les sous-séquences de la longueur R (R <= N). Je pensais à le faire en utilisant une programmation dynamique mais je ne pouvais pas trouver une bonne solution. Je veux un pseudo code pour cela.

par exemple. Compte tenu de la chaîne "ABC" et R = 2.

sortie: ab Ba acteur Californie avant JC cb

Merci d'avance


6 commentaires

Avec une boucle? Il n'y a que N-R + 1 de ces sous-séquences.


des sous-séquences contiguës ou non contiguës?


Je veux dire toutes les permutations NPR.


npr = Nombre de façons d'obtenir un sous-ensemble commandé d'éléments K à partir d'un ensemble de n éléments


Oui, une liste contenant NPR no des chaînes devrait être la sortie


Je ne pense pas que BA soit à la recherche de l'ABC


3 Réponses :


3
votes

1
votes

Essayez le code suivant (pas de pseudo code mais compréhensible, j'espère):

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

string S;
int n;
vector<string> L;


void F(int index, int length, string str)
{
  if (length == 0) {
    L.push_back(str);
  } else {
    for (int i = index; i < n; i++) {
      string temp = str;
      temp += S[i];
      F(i + 1, length - 1, temp);
    }
  }
}

int main()
{
  S = "abcde"; // replace with your string
  n = S.length();
  int k = 3; // or what you want
  F(0, k, string(""));

  int count = 0;

  for (int i = 0; i < int(L.size()); i++) {
    string temp = L[i];
    sort(temp.begin(), temp.end());
    do {
      cout << temp << endl;
      count++;
    } while (next_permutation(temp.begin(), temp.end()));
  }


  cout << endl << "count = " << count << endl;
  return 0;
}


0 commentaires

0
votes
    public static void combinations(String suffix,String prefix){
            if(prefix.length()<0)
                      return;
            System.out.println(suffix);
            for(int i=0;i<prefix.length();i++) {
                 combinations(suffix+prefix.charAt(i),prefix.substring(i+1,prefix.length()));
        }
    }


//call above function like: combinations("","abcd");     

0 commentaires