Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
 Аватар для Ярослав92
6 / 6 / 5
Регистрация: 07.03.2016
Сообщений: 89
.NET 4.x

Поиск самой длиной последовательности символов в строке

29.09.2016, 19:44. Показов 6557. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста!)
Написать метод для поиска самой длиной последовательности символов в строке!
Вот так пробовал, лажа какая то получилась!
C#
1
2
3
4
5
        public string isUnique()
        {
            char max = line.Cast<char>().Max();
            return max;
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2016, 19:44
Ответы с готовыми решениями:

В строке символов найти длину самой длинной цепочки
Дана строка символов и некоторый символ а. Вывести позицию и длину самой длинной непрерывной цепочки из символов а.

Поиск символов в строке
Всем привет! Ребята, не получается задача. Необходимо подсчитать количество букв в строке в верхнем регистре, в нижнем регистре и...

Поиск символов в строке
Как можно отсеять строки по первым 2 символам? Допустим есть строки акпр, вапр, акуц, реот В консоле нужно вывести только те строки,...

30
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 20:04
Самая длинная последовательность - имеется в виду "одинаковых символов"?
0
 Аватар для Ярослав92
6 / 6 / 5
Регистрация: 07.03.2016
Сообщений: 89
29.09.2016, 20:04  [ТС]
bax_tang, да!
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 20:12
Ярослав92, а Вы сами уже пробовали реализовать этот алгоритм? имею в виду, есть ли у Вас какие-либо наработки?
0
 Аватар для Ярослав92
6 / 6 / 5
Регистрация: 07.03.2016
Сообщений: 89
29.09.2016, 20:17  [ТС]
bax_tang, Вот!
C#
1
2
3
4
5
        public string isUnique()
        {
            string max = line.Cast<string>().Max();
            return max;
        }
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
29.09.2016, 20:19
Лучший ответ Сообщение было отмечено Ярослав92 как решение

Решение

Ярослав92,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    class Program
    {
        static void Main(string[] args)
        {
            string line = "8989898908098098098hjh7777709986";
            int max = line.GetCharLength().Max();
        }
        
    }
    public static class Enum
    {
        public static IEnumerable<int> GetCharLength(this string line)
        {
            for (int i =0, n=1;i<line.Length-1;i++)
            {
                if(line[i]==line[i+1])
                    n++;
                else
                {
                    yield return n;
                    n = 1;
                }
            }
        }
    }
1
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 20:19
Ярослав92, вынужден Вас огорчить, но это неправильный алгоритм. Хотя бы объясните, что Вы подразумевали, когда писали этот код.
0
 Аватар для Ярослав92
6 / 6 / 5
Регистрация: 07.03.2016
Сообщений: 89
29.09.2016, 20:24  [ТС]
bax_tang, я просто со строками не умею работать, вот так и получилось!

Добавлено через 35 секунд
EveKS, а можете объяснить зачем итератор!
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 20:26
Эх, ладно... версия на циклах без усложнений типа yield return: TextAnalyzer
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
29.09.2016, 20:31
Цитата Сообщение от Ярослав92 Посмотреть сообщение
зачем итератор
Я вот тоже в недоумении, действительно, зачем, если все делается одной строкой...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication24 {
    class Program {
        static void Main(string[] args) {
            string line = "abbcccddddeeeeeffffff9999999";
            int max = line.GroupBy(ch => ch).Max(i => i.Count());
            Console.WriteLine("Max is: {0}", max);
            Console.ReadLine();
        }
    }
}
1
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
29.09.2016, 20:31
bax_tang, Ярослав92, не хватает:
C#
1
2
if (i==line.Length-2)
    yield return n;
1
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 20:32
Цитата Сообщение от Ярослав92 Посмотреть сообщение
а можете объяснить зачем итератор
До тех пор, пока следующий символ в строке совпадает с текущим - увеличиваем длину последовательности; как только это условие не выполняется - возвращаем текущую насчитанную длину и сбрасываем её опять на 1. Потом на полученной последовательности вызываем Max() для определения максимальной длины последовательности. Отмечу, что в этом случае мы не знаем ни символа, из которого составлена последовательность, ни индекса её начала в строке, а знаем только её длину.
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
29.09.2016, 20:37
Цитата Сообщение от insite2012 Посмотреть сообщение
line.GroupBy(ch => ch).OrderBy(g => g.Key).Max(i => i.Count());
Цитата Сообщение от Ярослав92 Посмотреть сообщение
поиска самой длиной последовательности символов в строке
В моем понимании это:
11111,
но не 1212121313

Добавлено через 2 минуты
Цитата Сообщение от bax_tang Посмотреть сообщение
Отмечу, что в этом случае мы не знаем ни символа, из которого составлена последовательность, ни индекса её начала в строке, а знаем только её длину.
=) Тут зависит от потребностей, но расширить можно.
0
 Аватар для Ярослав92
6 / 6 / 5
Регистрация: 07.03.2016
Сообщений: 89
29.09.2016, 20:37  [ТС]
EveKS, я тоже так это понимаю!)
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 20:37
На всякий случай выложу свой вариант на форум, .NET Fiddle что-то подтупливает.

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
 
namespace TextAnalyzer
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.Write("Введите строку: ");
            string text = Console.ReadLine();
            
            int maxSeqIndex = -1;
            int maxSeqLength = 0;
            char maxSeqChar = '\0';
            
            for (int index = 0; index < text.Length; )
            {
                char symbol = text[index];
                
                int tempIndex = index;
                int seqLength = 0;
                
                while ((index < text.Length) && (symbol == text[index]))
                {
                    ++index; ++seqLength;
                }
                
                if (seqLength > maxSeqLength)
                {
                    maxSeqIndex = tempIndex;
                    maxSeqLength = seqLength;
                    maxSeqChar = symbol;
                }
            }
            
            if (maxSeqIndex != -1)
            {
                Console.WriteLine(
                    "Максимальная последовательность: символ '{0}' длиной {1}, индекс начала = {2}",
                    maxSeqChar, maxSeqLength, maxSeqIndex);
            }
            else Console.WriteLine("Исходная строка пуста.");
        }
    }
}
0
 Аватар для Ярослав92
6 / 6 / 5
Регистрация: 07.03.2016
Сообщений: 89
29.09.2016, 20:42  [ТС]
а это что?
C#
1
if (i==line.Length-2) yield return n;
Добавлено через 2 минуты
bax_tang, а как это залить в метод можно?
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
29.09.2016, 20:46
Ярослав92, ошибка была:
Исправил:
Добавлено через 40 секунд
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        public static IEnumerable<int> GetCharLength(this string line)
        {
            for (int i =0, n=1;i<line.Length-1;i++)
            {
                if(line[i]==line[i+1])
                    n++;
                else
                {
                    yield return n;
                    n = 1;
                }
                if (i==line.Length-2)
                    yield return n;
            }
        }
1
 Аватар для Ярослав92
6 / 6 / 5
Регистрация: 07.03.2016
Сообщений: 89
29.09.2016, 20:50  [ТС]
EveKS, твой вариант хорош, но у меня класс не статический и это не работает!
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 20:51
Ярослав92, приведите весь класс целиком - поможем.
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
29.09.2016, 21:02
Ярослав92,
Это малость не так делается, в данном случае нужно копировать весь статический класс.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public static class Enum
    {
        public static IEnumerable<int> GetCharLength(this string line)
        {
            for (int i =0, n=1;i<line.Length-1;i++)
            {
                if(line[i]==line[i+1])
                    n++;
                else
                {
                    yield return n;
                    n = 1;
                }
                if (i==line.Length-2)
                    yield return n;
            }
        }
   }
Немного расширил
нету проверок на попадание в область
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    class Program
    {
        static void Main(string[] args)
        {
            string line = "89799666968h777777";
            var max = line
                .GetCharLength('7',0,line.Length-4)
 
                .AsParallel()
                .AsOrdered();
        }
        
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public static class Enum
    {
        public static IEnumerable<int> GetCharLength(this string line, char ch, int bg, int end)
        {
            for (int i =bg, n=1;i<end-1;i++)
            {
                if(line[i]==line[i+1])
                    n++;
                else
                {
                    if (line[i] == ch)
                        yield return n;
                    else
                        yield return 0;
                    n = 1;
                }
                if (i==end-2)
                    if(line[end] == ch)
                        yield return n;
                    else
                        yield return 0;
            }
        }
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2016, 21:02
Помогаю со студенческими работами здесь

Поиск и выделение определенных символов в строке
Доброго времени суток. Помогите пожалуйста решить следующую задачу: пользователь вводит текстовую строку, содержащую некоторые символы,...

Поиск в строке любых символов, кроме заданных
подскажите как можно определить что в строке содержатся какие либо символы, кроме данных т.е. &quot;вавававава&quot; ищем в ней...

Поиск самой частовстречающейся последовательности символов
Дана случайная последовательность символов (допустим 10000 штук). Нужно найти под_последовательность максимальной длины такую, что она...

В заданной строке заменить все последовательности одинаковых символов длиной более двух на конструкцию (k)a
Помогите пожалуйста.Не могу сообразить как делать(Нужно составить на языке Паскаль программу: В заданной строке заменить все...

В заданной строке заменить все последовательности одинаковых символов длиной более двух на конструкцию
Не могу понять в чем ошибка... Прога не работает... Задание такое: В заданной строке заменить все последовательности одинаковых символов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru