Помощ със задачата Title Search със C#

Здравейте, имам проблем със задача 3 от Mock Exam 4
Sign in това е условието.
Ще съм много благодарна за съвет.

Това е решението ми.

using System;
using System.Collections.Generic;

namespace next
{
class Program
{
static void Main(string[] args)
{
string title = Console.ReadLine();
int lines = int.Parse(Console.ReadLine());
int index = -1;
for (int i = 0; i < lines; i++)
{
string word = Console.ReadLine().ToLower();
string temp = title;

            if (word.Length>title.Length)
            {
                Console.WriteLine("No such title found!");
                index = 2;
                continue;
            }

            for (int j = 0; j < word.Length; j++)
            {
                index = temp.IndexOf(word[j].ToString());
                if (index > -1)
                {
                    temp = temp.Remove(index, 1);
                    index = -1;
                    if (j == word.Length-1)
                    {
                        index = 1;
                    }
                } 
            }

            if (index == 1)
            {
                Console.WriteLine(temp);
                title = temp;
            }
            else if(index == -1)
            {
                Console.WriteLine("No such title found!");
            }

        }

    }
}

}

Здравей, бих ти препоръчал да провериш пак условието, също така не съм сигурен този magic string - “Title” от къде идва.
На кратко, идеята е че трябва да прочетеш input и N (броя на думите, който ще трябва да провериш дали присъстват в останалият input).
Ето един пример:
string input = Console.ReadLine();
int n = int.Parse(Console.ReadLine());

for(int i =0; i < n; i++)

string currentWord = Console.ReadLine();

//logic if contains (remove it from input)

if(contains)

 //Print something

else

//Print something else

Бих те посъветвал, като изпращаш код да използваш Pastepin и когато имаш въпроси да се по конкретни.

Поздрави,
Мишо

Благодаря, че ми отговори.

Това е решението в Pastebin https://pastebin.com/FfyBVm6g
Добавих коментари в началните редове, за да е по-ясно коя променрива, какво представлява.

Проблема ми е, че първите 3 и последните 2 теста минават, но не и другите. Пренаписах кода 5-6 пъти от нулата, но все я докарвам до там и не мога да разбера, какво изпускам като логика.

Пробвах вместо string да използвам chаr [ ], методи, List, но …

Здрасти, пусни си програмата в debug и прегледай логиката в нестнатия For.
Също така, погледни тази логика:
for (int j = 0; j < word.Length; j++)
Идеята е че трябва да минеш през Title/Temp за всеки character от word/currentWord и да провериш дали го има, ако char-ровете съществуват в дадената последователност да ги изтриеш от Title/Temp и това да го направиш N на брой пъти.

Здравей, в нестнатия for въртя по дължината на word (подадената дума, чиито символи трябва да намеря в title), а с IndexOf намирам индекса на първото намерено съвпадение в temp\title за всяка буква от word, ако има съвпадение премахвам намерената буква в temp, като запазвам title непроменен, а ако няма такава буква IndexOf връща - 1 и печатам, че не е намерена думата и презаписвам отново temp да е равен на title и заличавам промените. Ако цялата дума се съдържа сетвам index =1 записвам промените (премахването на намерените букви) и печатам остатъка. За това не въртя по дължината на temp/title, a по word.
А външния for върти по N, който съм задала като lines.

Здрасти, изпращам ти решението на задачата:

Мисля, че ако оправиш логиката с IndexOf и провериш какъв string се формира на 34 ред, ще намериш отговора.
Поздрави

Благодаря много! Там е бил проблема. Явно с Remove() не е толкова прецизна операция.
Доста ме измъчи тази задача, благодаря още веднъж!

И аз се чудя къде ми е грешката и не мога да я намеря…
Някой би ли хвърлил един поглед,моля!

using System;

namespace Title_Search
{
class Program
{
static void Main(string[] args)
{
string title = Console.ReadLine();
int n = int.Parse(Console.ReadLine());

        for (int i = 0; i < n; i++)
        {
            string lettersInclude = string.Empty;
            int index = 0;
            string checkWords = Console.ReadLine();

            for (int j = 0; j < checkWords.Length ; j++)
            {
                for (int l = index; l < title.Length ; l++)
                {
                    if (checkWords[j] == title[l])
                    {
                        lettersInclude += title[l];
                        index = l; 
                        break;
                    }
                }
            }
            index = 0;

            if (checkWords == lettersInclude)
            {
                for (int j = 0; j < checkWords.Length; j++)
                {
                    for (int l = index; l < title.Length; l++)
                    {
                        if (checkWords[j] == title[l])
                        {
                            title =title.Remove(l,1);
                            break;
                        }
                    }
                }
            }
            else
            {
                Console.WriteLine("No such title found!");
                continue;
            }
            Console.WriteLine(title);
        }
    }
}

}

Здрасти,
Пробвай вместо с Remove да запазваш оставащата част от title със Substring в 2 части, като първата е от началото до съвпадащия символ, а втората започва от този след него и до края.

Във същата променлива “Title” ли ? Би ли ми показала как точно би станало?


Тези промени ще ти решат проблема.

Здравейте, и мен тази задача много ме измъчи.

Искам да попитам обаче нещо което забелязах. В примера на @Dimityrdimitrov92 в първата част можем да влезем в условие което не изглежда коректно… давам пример:

ако тестваме с title примерно “asdf” и да речем имаме 2 думи първата от които е “ss”, понеже започваме следващата итерация на цикъла от id (където се намира същата буква) от предната итерация а не от id+1, излиза, че думата се съдържа което е грешно или просто аз пропускам нещо в условието… ако може да дадете мнение дали е така и дали Mock Exams допускат и неправилни решения защото всъщност с този алгоритъм дава 100 точки и accept-ва всичко.

Ето снимка с тестовите данни. Въвеждаме “ss” като първа дума и все пак алгоритъмът я приема като валиден sequence. При тест в сайта дава 100 точки както споменах !