Я пытался найти лучший подход к объединению слов в строке, чтобы сделать комбинации этой строки. Я пытаюсь сделать это для класса проекта. Если строка «Быстрая лиса», мне нужно найти способ вывода «Thequick fox», «quickfox» и «thequickfox». Я пробовал использовать string.split и склеивать их вместе, но не имел большой удачи. Проблемы - это строковый ввод может иметь любой размер.Как удалить пробелы, чтобы сделать комбинацию строк
ответ
Я решил попробовать это для удовольствия. Идея здесь состоит в том, чтобы разделить большие проблемы на более мелкие подзадачи. Поэтому я сначала начал с строк, которые имели 0 и 1 место. Я вижу, что с 0 пробелом единственными возможными комбинациями являются строковые элементы. Имея 1 пробел, я могу либо иметь это пространство, либо нет.
Тогда мне просто нужно рекурсивно разделить проблему, пока я не получу один из базовых корпусов. Таким образом, для этого сделайте так, чтобы элементы в массиве split с шагом 2. Таким образом, я гарантированно получу один из базовых вариантов. Как только я это сделаю, я снова запускаю его через программу и выясняю, как добавить все результаты этого в мой текущий набор комбинаций.
Вот код:
class Program
{
static void Main(string[] args)
{
string test1 = "fox";
string test2 = "The quick";
string test3 = "The quick fox";
string test4 = "The quick fox says";
string test5 = "The quick fox says hello";
var splittest1 = test1.Split(' ');
var splittest2 = test2.Split(' ');
var splittest3 = test3.Split(' ');
var splittest4 = test4.Split(' ');
var splittest5 = test5.Split(' ');
var ans1 = getcombinations(splittest1);
var ans2 = getcombinations(splittest2);
var ans3 = getcombinations(splittest3);
var ans4 = getcombinations(splittest4);
var ans5 = getcombinations(splittest5);
}
static List<string> getcombinations(string[] splittest)
{
var combos = new List<string>();
var numspaces = splittest.Count() - 1;
if (numspaces == 1)
{
var addcombos = AddTwoStrings(splittest[0], splittest[1]);
var withSpacesCurrent = addcombos.Item1;
var noSpacesCurrent = addcombos.Item2;
combos.Add(withSpacesCurrent);
combos.Add(noSpacesCurrent);
}
else if (numspaces == 0)
{
combos.Add(splittest[0]);
}
else
{
var addcombos = AddTwoStrings(splittest[0], splittest[1]);
var withSpacesCurrent = addcombos.Item1;
var noSpacesCurrent = addcombos.Item2;
var futureCombos = getcombinations(splittest.Skip(2).ToArray());
foreach (var futureCombo in futureCombos)
{
var addFutureCombos = AddTwoStrings(withSpacesCurrent, futureCombo);
var addFutureCombosNoSpaces = AddTwoStrings(noSpacesCurrent, futureCombo);
var combo1 = addFutureCombos.Item1;
var combo2 = addFutureCombos.Item2;
var combo3 = addFutureCombosNoSpaces.Item1;
var combo4 = addFutureCombosNoSpaces.Item2;
combos.Add(combo1);
combos.Add(combo2);
combos.Add(combo3);
combos.Add(combo4);
}
}
return combos;
}
static Tuple<string, string> AddTwoStrings(string a, string b)
{
return Tuple.Create(a + " " + b, a + b);
}
}
}
Это, как я получил это работает, не уверен, что это лучший алгоритм.
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Enter a string");
string input = Console.ReadLine();
//split the input string into an array
string[] arrInput = input.Split(' ');
Console.WriteLine("The combinations are...");
//output the original string
Console.WriteLine(input);
//this loop decide letter combination
for (int i = 2; i <= arrInput.Length; i++)
{
//this loop decide how many outputs we would get for a letter combination
//for ex. we would get 2 outputs in a 3 word string if we combine 2 words
for (int j = i-1; j < arrInput.Length; j++)
{
int end = j; // end index
int start = (end - i) + 1; //start index
string output = Combine(arrInput, start, end);
Console.WriteLine(output);
}
}
Console.ReadKey();
}
//combine array into a string with space except from start to end
public static string Combine(string[] arrInput, int start, int end) {
StringBuilder builder = new StringBuilder();
bool combine = false;
for (int i = 0; i < arrInput.Length; i++) {
//first word in the array... don't worry
if (i == 0) {
builder.Append(arrInput[i]);
continue;
}
//don't append " " if combine is true
combine = (i > start && i <= end) ? true : false;
if (!combine)
{
builder.Append(" ");
}
builder.Append(arrInput[i]);
}
return builder.ToString();
}
}
- 1. Как сделать случайную комбинацию, чтобы не повторять?
- 2. удалить разрывы строк и пробелы
- 3. SQLSRV Update Query, чтобы удалить пробелы
- 4. Удалить кратчайшие ведущие пробелы со всех строк
- 5. Как получить комбинацию связанных строк
- 6. Как удалить питона пробелы
- 7. Как сделать комбинацию изображений чувствительной?
- 8. Удалить разрывы строк/пробелы из массива
- 9. Удалить пробелы и переводы строк - BeautifulSoup питон
- 10. Oracle - как удалить пробелы?
- 11. Как сделать конкаттацию строк, чтобы сделать список
- 12. Получите каждую комбинацию строк
- 13. TinyMCE удалить текстовые пробелы и разрывы строк
- 14. Удалить вкладки или пробелы из пустых строк
- 15. как сделать комбинацию, основанную на строках
- 16. Чтобы удалить пробелы внутри переменной в PHP
- 17. Сделать комбинацию из палиндрома
- 18. Регулярное выражение, чтобы удалить все пробелы
- 19. Как удалить пробелы и разрывы строк из определенных частей строки?
- 20. Я хочу, чтобы удалить все пробелы
- 21. Как удалить все пробелы?
- 22. PHP Удалить любую комбинацию символов
- 23. Можно ли группировать комбинацию строк?
- 24. Как удалить пробелы и переводы строк в строку
- 25. Как получить комбинацию строк через запрос
- 26. Как удалить пробелы из mkdir()
- 27. Как удалить пробелы в HTML?
- 28. Удалить пробелы в PHP
- 29. MySQL Сделать комбинацию столбцов уникальной
- 30. Как удалить пробелы в BeautifulSoup
Можете ли вы показать нам свои текущие попытки и где, в частности, они терпят неудачу? – Rob
Вам нужно будет вывести комбинации 2^(n - 1), где 'n' - количество слов. Он будет работать в допустимое время, если 'n <= 30'. Я предлагаю взять итератор маски и посетить все значения от 0 до 2^(n - 1), вы построите комбинацию, проверьте 'i'-th бит, чтобы увидеть, должно ли присутствовать' i'-th пространство. –