ЧакЭ одобряЭ
284 / 283 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
1

Найти в строке все повторяющиеся подстроки

01.09.2011, 19:35. Показов 2216. Ответов 7
Метки нет (Все метки)

может есть какой-нибудь встроенный метод?
ну то есть
[VHVS]SP[QUCE]MRVBVBBB[VHVS]URQGIBDUGRNICJ[QUCE]RVUAXSSR
повторяются VHVS и QUCE.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2011, 19:35
Ответы с готовыми решениями:

Найти все подстроки в строке
var Str1, Str2: String; P: Integer; { ... } Str1:='Hi! How do you do?'; Str2:='do'; ...

Найти все подстроки в строке
Есть строка, следующего вида: ...<div class="b-list__item"><a...

Найти все возможные подстроки в строке
Найти все возможные подстроки в строке начиная с конца.

Как найти все подстроки в строке?
Как найти все подстроки в строке, а не только одну?

7
6255 / 3556 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
01.09.2011, 19:40 2
Интересно по какому принципу Вы собрались искать. Например я нашел еще повторяющиеся строки:
[VHVS]SP[QUCE]MRVBVBBB[VHVS]URQGIBDUGRNICJ[QUCE]RVUAXSSR
0
ЧакЭ одобряЭ
284 / 283 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
01.09.2011, 20:01  [ТС] 3
Цитата Сообщение от Петррр Посмотреть сообщение
Интересно по какому принципу Вы собрались искать. Например я нашел еще повторяющиеся строки:
[VHVS]SP[QUCE]MRVBVBBB[VHVS]URQGIBDUGRNICJ[QUCE]RVUAXSSR
она слишком маленькие. 3 символа и больше.(но если метод такой есть то можно и оставить).
0
557 / 434 / 21
Регистрация: 16.12.2010
Сообщений: 953
01.09.2011, 22:43 4
как я вижу решение проблемы. Вам точно не подойдет(слишком медленно будет)
0
Злой няш
2134 / 1503 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
01.09.2011, 23:47 5
Вот как я вижу решение:
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
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        const int min = 3; // Минимальная необходимая длина.
        string input = "VHVSSPQUCEMRVBVBBBVHVSURQGIBDUGRNICJQUCERVUAXSSR"; // Входная строка.
        HashSet<string> set = new HashSet<string>(); // Вспомогательное результирующее множество.
        for (int length = input.Length / 2; length >= min; length--) // Проверяем все длины от половины строки (больше нет смысла) до минимальной необходимой длины.
            for (int start = 0; start < input.Length - length; start++) // Проверяем все вмещающиеся позиции в заданную проверочную длину.
                if (input.IndexOf(input.Substring(start, length), start + length + 1) != -1) // Если есть повторы.
                {
                    set.Add(input.Substring(start, length)); // Добавляем найденное в результирующие множество.
                    input = input.Replace(input.Substring(start, length), string.Empty); // Убираем из входной строки все повторы.
                    if (length > input.Length / 2) length = input.Length / 2; // Корректирование длины.
                    if (start >= input.Length - length) break; // Корректирование позиции.
                }
        string[] result = new string[set.Count]; // Создаем результирующий массив строк.
        set.CopyTo(result); // Заполняем его найденными значениями.
        foreach (string value in result) // Выводим результат на консоль.
            Console.WriteLine(value);
    }
}
Сложность где-то O(n^3).

P.S. Возможны ошибки.
1
ЧакЭ одобряЭ
284 / 283 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
02.09.2011, 00:46  [ТС] 6
по идее можно использовать любой контейнер?
0
Злой няш
2134 / 1503 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
02.09.2011, 01:57 7
Цитата Сообщение от Artishok Посмотреть сообщение
по идее можно использовать любой контейнер?
Если речь о том, что я использовал множество HashSet, то да (в первом варианте я не удалял из входной строки найденные подстроки, потому могли быть повторы). Например можно HashSet заменить на список, тогда не нужен будет массив result, но не стоит забывать, что обращение к i-ому элементу у списка занимает O(n) операций, тогда как у массива O(1).
0
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 3
04.09.2011, 16:09 8
можно ли сделать так чтобы заменялись повторяющие подстроки не пустой строкой а случайной строкой(из цифр например) чтобы строка не изменяла размера?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2011, 16:09
Помогаю со студенческими работами здесь

С использованием функции найти все вхождения подстроки в строке
Всем логимыслящим Большой Привет! Помогите меня избавить от страданий написать программу...Лайками...

Найти и заменить в исходной строке все вхождения заданной подстроки
Найти в исходной строке все вхождения (но не более девяти) заданной подстроки и заменить их на...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru