Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
AvengerAlive
5 / 5 / 1
Регистрация: 30.07.2011
Сообщений: 257
#1

Молниеносное нахождение подстрок - C++

25.08.2011, 20:21. Просмотров 2749. Ответов 43
Метки нет (Все метки)

Воодится число тестов. Далее каждый тест содержит 2 строки. Подстроку и текст. Надо найти количество подстрок в тексте. Количество тестов неизвестно, но много. Длина подстроки 10000, а текста 1000000.
Вот мой код:
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
string str1;
string str2;
string str;
int i,n,m,q=0,t,k,a;
int *mas;
cin >> t;
while (t--)
{
 cin >> str2;
 cin >> str1;  
 n=str1.length();
 m=str2.length();
 mas=(int*)malloc((n+m+1)*sizeof(int));
 str=str2+'#'+str1; mas[0]=0;
 a=0; k=0; q=0;
 for(i=1; i<n+m+1; i++)
  {         
   while((k>0) && (str[k]!=str[i])) k=mas[k-1];
   if (str[k]==str[i]) k++;
   if (k==m) q++;
   mas[i]=k;
  }
 cout << q << endl;
}
return 0;
}
Медленно, кто-нибудь может ускорить?
http://www.cyberforum.ru/cpp-beginners/thread630141.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2011, 20:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Молниеносное нахождение подстрок (C++):

вырезки подстрок
написал вот такой код #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Количество подстрок в строке
Нужно что-бы пользователь ввел 2 строки и ему вывело сообщение о том, сколько...

Замена подстрок в строке
Кто знает, как в данной строке заменить все подстроки &quot;123&quot; на &quot;456&quot;?

Подсчёт количества подстрок
Посмотрите пожалуйста нормально ли написана функция, которая считает количество...

Поиск и вывод подстрок
злорадствуйте подскажите пожалуйста немного запутался как вывести через find...

43
#pragma
Временно недоступен
955 / 226 / 14
Регистрация: 12.04.2009
Сообщений: 921
26.08.2011, 15:16 #41
Может быть, это поможет?
http://www.cyberforum.ru/cpp-beginners/thread38638.html#post184783
Там строка проматывается кусками по несколько байт.
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
26.08.2011, 15:30 #42
Цитата Сообщение от #pragma Посмотреть сообщение
Там строка проматывается кусками по несколько байт.
Выглядит как будто бы Вы предлагаете использовать брутфорс. Я думаю, здесь все же немного другой случай.
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.08.2011, 16:46 #43
AvengerAlive, ваша задача с какого сайта?
0
valeriikozlov
Эксперт С++
4683 / 2509 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
27.08.2011, 02:40 #44
AvengerAlive,
ссылку на задачу можете дать?
0
27.08.2011, 02:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 02:40
Привет! Вот еще темы с решениями:

Удаление подстрок из строки
Помогите, пожалуйста, с реализацией функции. Есть строка str типа string и...

Удаление всех подстрок из строки
Здравствуйте. После выполнения моей программы у меня выдает вот такую ошибку ...

Найти количество вхождений подстрок в строку
Собственно, в input.txt лежит строка размером до 250 символов, в output.txt...

Подсчитать количество подстрок в текстовом файле
Помогите написать программу которая может подсчитать сколько раз подстрока...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru