2016-03-14 3 views
-5

Мне нужно найти самую большую подстроку, содержащую все вхождение символа в C#.найти самую большую подстроку, которая содержит все нахождение символа

Примера - Входная строка: «Меня зовут granar» Nee, чтобы узнать самую большую подстроку, которая содержит все вхождения символа «а», результат «АМЕ гран»

Пожалуйста Помогите мне в алгоритме?

+3

Подстрока (IndexOf ('a'), LastIndexOf ('a') - IndexOf ('a')) –

+1

Где ваш код! что ты уже испробовал? – Marusyk

ответ

0
  1. Алгоритм: INT = -1 начать, конец = -1

  2. в цикле
    сохранить первый индекс «a» в начале и в конце
    постоянно обновлять каждый раз, когда вы встреча 'а'

  3. strinput.substring (начало, конец)

    static void Main(string[] args) 
        { 
         int begin = -1, end = -1; 
    
         string input = "my name is granar"; 
    
         bool isfirst = true; 
         for (int i = 0; i < input.Length; i++) 
         { 
          if(input[i] == 'x') 
          { 
           if (isfirst) 
           { 
            begin = i; 
            end = i; 
            isfirst = false; 
           } 
           else 
            end = i; 
          } 
         } 
    
         if (begin != -1) 
         { 
          string substr = input.Substring(begin, end - begin + 1); 
    
          Console.WriteLine(substr); 
         } 
         else Console.WriteLine("Not Found"); 
         Console.ReadKey(); 
        } 
    

Это лучший алгоритм для увеличения строки, как мы Перебор целая строка только один раз.

2

Это следует сделать это:

var text = "my name is granar"; 
var firstA = text.IndexOf("a"); 
var LastA = text.LastIndexOf("a"); 
int length = LastA - firstA + 1; 
if (firstA != -1) 
    var result = text.Substring(firstA, length); 
+0

Одна строка не всегда лучше нескольких. Вы делаете что-то более одного раза, также небезопасно, если нет «a», вы получите исключение. Использовать переменные, как в вашей первой версии;) –

+0

вызов двух функций IndexOf увеличивает сложность вашего решения. Внутри он будет запускать O (n) дважды. –

+0

Хмм, у меня была ответная строка, но это так просто, что я думаю, что это должно быть однострочное решение. –

Смежные вопросы