Как увеличить скорость работы программы? - C#
Формулировка задачи:
Всем привет! Программа проходит 6/8 тестов (тесты неизвестны), а на последние 2 превышен лимит времени. Прошу помощи.
Задача:
Шантажист пытается составить сообщение, вырезая буквы из газетной статьи. Ему не нужны пробелы и знаки препинания, не важен регистр букв, то есть он может использовать прописные буквы вместо строчных и наоборот.
Ввод содержит в первой строке текст газетной статьи длиной до 100000 символов, состоящий из латинских букв, цифр, пробелов и знаков препинания. Во второй строке содержится сообщение шантажиста длиной до 100000 символов, состоящее только из латинских букв и пробелов.
Вывести YES, если сообщение можно составить, и NO если нельзя.
Пример ввода:
Blame cosmic rays not CO2 for warming up the planet.
bring the ransom
Вывод для примера:
YES
using System;
namespace F2
{
class Program
{
static string RemoveSpaces(string InString)
{
InString = InString.Replace(" ", string.Empty);
InString = InString.Trim().Replace(" ", string.Empty);
return InString;
}
static void Main(string[] args)
{
string Text = Console.ReadLine().ToUpper();
string Message = Console.ReadLine().ToUpper();
Message = RemoveSpaces(Message);
int check = 0;
for (int i = 0; i < Message.Length; i++)
{
for (int j = 0; j < Text.Length; j++)
{
if (Convert.ToString(Message[i]) == Convert.ToString(Text[j]))
{
check++;
Text = Text.Remove(j, 1);
goto Q;
}
}
Q:;
}
if (check == Message.Length) Console.WriteLine("YES");
else Console.WriteLine("NO");
Console.ReadKey();
}
}
}Решение задачи: «Как увеличить скорость работы программы?»
textual
Листинг программы
using System;
namespace Blackmailer
{
class Program
{
private static void Main(string[] args)
{
string text = "Blame cosmic rays not CO2 for warming up the planet.";
string message = "bring the ransom";
//string text = "Abc";
//string message = "abc";
char[] alphabet =
{
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
};
int[] messageСounts = new int[26];
int[] textСounts = new int[26];
for (int i = 0; i < message.Length; i++)
{
for (int j = 0; j < alphabet.Length; j++)
{
if (char.ToLower(message[i]) == alphabet[j])
{
messageСounts[j]++;
break;
}
}
}
for (int i = 0; i < text.Length; i++)
{
for (int j = 0; j < alphabet.Length; j++)
{
if (char.ToLower(text[i]) == alphabet[j])
{
textСounts[j]++;
break;
}
}
}
bool check = true;
for (int i = 0; i < textСounts.Length; i++)
{
if (messageСounts[i] > textСounts[i])
{
check = false;
break;
}
}
if (check)
Console.WriteLine("YES");
else
Console.WriteLine("NO");
Console.ReadKey();
}
}
}