Bu dizenin birleşimlerini oluşturmak için bir dizede sözcükleri birleştirmeye en iyi yaklaşımı anlamaya çalışıyorum. Bunu bir sınıf projesi için yapmaya çalışıyorum. Dize "Hızlı tilki" ise, "Tilki tilkisi", "hızlı bağlantı" ve "thequickfox" için bir yol bulmam gerekiyor. String.split'i kullanmayı ve onları bir araya getirmeyi denedim, ama çok şansım olmadı. Sorunlar, string girişi herhangi bir boyutta olabilir.Dizeleri birleştirmek için boşluklar nasıl kaldırılır
-2
A
cevap
0
Bunu eğlenmek için denemeye karar verdim. Buradaki fikir, daha büyük sorunları daha küçük alt problemlere bölmektir. Bu yüzden ilk önce 0 ve 1 boşluk olan dizelerle başladım. Bunu 0 boşluk ile görüyorum, olası tek kombinasyonlar dize öğeleridir. 1 boşluk ile o alana sahip olabilirim ya da olmayabilir.
Ardından, temel durumlardan birini alana kadar sorunu yinelemeli olarak bölmem gerekiyor. Bu yüzden, 0'lık artışlarla bölünmüş dizideki Skip
öğelerini yapıyorum. Bu şekilde, temel durumlardan birini almayı garanti ediyorum. Bunu yaptıktan sonra, programı tekrar çalıştırıyorum ve bunun tüm sonuçlarını mevcut kombinasyonlarıma nasıl ekleyeceğimi anladım.
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);
}
}
}
0
Bu buna iyi algoritma olup olmadığından emin, çalışma var nasıl:
İşte kod.
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();
}
}
İlgili konular
- 1. Oracle - beyaz boşluklar nasıl kaldırılır?
- 2. Dizeleri log4net ile birleştirmek
- 3. Dize, matlab arasındaki boşluklar nasıl kaldırılır?
- 4. Dizeleri C önişlemcisiyle noktalarla birleştirmek nasıl?
- 5. Bir dizgede ekstra döndürmeler ve boşluklar regex ile nasıl kaldırılır?
- 6. Tüm boşluklar nasıl kaldırılır ve \ n \ r bir String içinde?
- 7. Bir dizeden son ve ilk boşluklar nasıl kaldırılır?
- 8. '<' to '>' sayfasındaki tüm alt dizeleri nasıl kaldırılır
- 9. UDF değerleri birleştirmek için
- 10. Bölünmüş boşluklar
- 11. Ayrıştırma dizeleri
- 12. Data.frame'deki boşluklar nasıl doldurulur (tarih-)?
- 13. 2 bit sütunları birleştirmek için nasıl
- 14. VS2010 - Tüm boşluklar için tire gösterimi
- 15. "uniq" komutundan çıkışın önde gelen boşlukları nasıl kaldırılır? Eğer gelen boşluklar kaldırmak isterseniz
- 16. MySQL dizeleri ||
- 17. Plists birleştirmek için kolay yolu?
- 18. Bash - Senaryo hata boşluklar
- 19. C++ dizeleri ve Arduino Dizeleri nasıl birleştirilir?
- 20. JS regexp'in sözler, boşluklar
- 21. Java - boşluklar (ORA-00920)
- 22. Dizin yolundaki pythondaki boşluklar
- 23. Dizeleri
- 24. SQL sorgusu için nerede ve sipariş birleştirmek için nasıl
- 25. dizeleri
- 26. Bir ifade aracılığıyla ng sınıfı uygularken dizeleri ve değişkenleri doğru şekilde birleştirmek nasıl?
- 27. Eğik filtre boşluklar
- 28. .NET'te Normal İfade için dizeleri nasıl kodlanır?
- 29. Ansible'ın blockinfile'ında blok başlangıcında boşluklar nasıl eklenir?
- 30. Salatalık özellik adlarında boşluklar nasıl kullanılır?
Bize şu anki denemelerinizi ve özellikle nerede başarısız olduklarını gösterir misiniz? – Rob
2^(n - 1) kombinasyonlar kullanmalısınız; burada 'n' bir dizi sözcüktür. Eğer 'n <= 30' ise uygun zamanda çalışır. Bir maske yineleyici almayı ve 0 ile 2^(n - 1) arasındaki tüm değerleri ziyaret etmenizi öneririm, bir kombinasyon oluşturacaksınız, 'i'-th alanının bulunup bulunmadığını görmek için 'i' -sini kontrol edin. –