Ищем слово шаблон в строке - PullRequest
0 голосов
/ 03 марта 2020

Мне нужно найти максимальное количество букв, которые находятся между двумя одинаковыми строками. Например, рассмотрим следующую строку:

progxrammerrxproxgrammer

Мне нужно найти длину rx, которая равна 2 между первым progxrammer и вторым proxgrammer. Для достижения этой цели мне нужно найти способ идентификации подмножества приведенной выше строки, который можно переставить так, чтобы образовалось слово «программист». В качестве другого примера рассмотрим это:

xprogxrmaxemrppprmmograeiruu

Опять же он должен найти pp, который находится между двумя наборами programmer слов.

Я пробовал следующее, но я действительно Понятия не имею, как мне этого добиться?

public static int programmerStrings(string s)
{
    var firstPart = s.ToLower().Contains("programmer");

    var secondPart = s.ToLower().Contains("programmer");

    return (secondPart - firstPart).Length;
}

1 Ответ

1 голос
/ 03 марта 2020

В основном вам нужно искать символы, начиная с начала, а затем снова с конца, чтобы найти начало и конец строки, которая находится между похожими «словами». Следующая строка получит длину этой строки или -1, если она не существует.

public int LengthBetween(string word, string input)
{
    int start = 0;
    int end = input.Length - 1;
    var letters = word.ToList();
    while(start < input.Length && letters.Count > 0)    
    {
        letters.Remove(input[start]);
        start++;
    }

    letters = word.ToList();
    while(end >= 0 && letters.Count > 0)    
    {
        letters.Remove(input[end]);
        end--;
    }

    if(start > end) return -1;
    return end - start + 1;
}

Затем вызов

LengthBetween("programmer", "progxrammerrxproxgrammer")

вернет 2.

Если вместо вам нужно фактическое слово, просто измените тип возвращаемого значения на string и измените конец на

if(start > end) return null;
return input.Substring(start, end - start + 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...