Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 09.05.2018
Сообщений: 26
1

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

21.12.2018, 19:00. Показов 3747. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени. Есть следующее задание: назовем строку палиндромом, если она одинаково читается слева направо и справа налево. Примеры палиндромов: «abcba», «55», «q», «xyzzyx». Требуется для введенной строки найти максимальную по длине ее подстроку, являющуюся палиндромом.
Есть код:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "stdafx.h"
#include <iostream>
#include <string>
#include <clocale>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    cout << "Введите строку-палиндром для вывода её максимальной подстроки: ";
    string str;
    getline (cin, str);
    int size = str.length();
    int max = 1;
    int i = 1;                               //середина палиндрома;
    int count = 1;
    int j = 1;                               //первый знак палиндрома (при несимметричном палиндроме);
    int k = 0;                               //первый знак палиндрома (при симметричном палиндроме);
    int start;
    while ((i - j) >= 0 && (i + j) < size) { //чтобы не выйти за пределы массива;
        if (str[i - j] == str[i + j]) {      //сравниваем символы, стоящие справа и слева от i-того;
            count+=2;                        //длина палиндрома увеличивается на 2 символа;
            j++;                             
            if (count > max){
                max = count;
        }
        else {                               //если палиндром кончился, то передвигаем его середину на следующий элемент; 
            j = 1;
            count = 1; 
            i++;
        }
    }
    i = 0;
    count = 0;
    while ((i - k) >= 0 && (i + j) < size) { //чтобы не выйти за пределы массива;
        if (str[i - k] == str[i + j]) {      //сравниваем i-тый и соседний справа от i-того символ;
            count += 2;                      //если символы одинаковые, то прибавить 2 к длине палиндрома;
            j++;
            k++;                             
            if (count > max)
                max = count;
        }
        else {                               //если палиндром кончился, то передвигаем его середину на следующий элемент;
            k = 0;
            j = 1;
            count = 0;
            i++;
        }
    }
    if (k>j)                                 //если k больше, то палиндром симметричен и должен начинаться с k;
        start = k;
    else                                     //если j больше, то палиндром несимметричен и должен начинаться с j;
        start = j;
    cout << str.substr(start, max) << endl;  //вывести подстроку, начинающуюся с найденного начала строки start и с найденной длинной max
    system("pause");
    return 0;
}
}
Количество символов max находит нормально, а с параметром start я совладать не могу. Подскажите, как нормализовать это? Программа вместо палиндрома выводит что-то очень нелицеприятное в виде совсем не тех кусков строки. Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2018, 19:00
Ответы с готовыми решениями:

В файл вывести максимальную длину подстроки, являющейся палиндромом
Здравствуйте Помогите найти алгоритм нахождения палиадрома #include &quot;stdafx.h&quot;...

Поиск максимальной по длине монотонно неубывающей подпоследовательности вещественных чисел
Напишите на языке C / C++ программу поиска максимальной по длине монотонно неубывающей...

Найти длину максимальной подстроки, такой что в этой подстроке не существует подстроки равной какой-то строке
Не могу решить задачу, я понял саму задачу. Не могу написать код, помогите, плз! У Дроида-На2а...

Определить число вхождений в строку подстроки "аба", вывести символы строки, не являющейся буквами или цифрами
решить нужно в течении часа определить число вхождений в строку подстроки &quot;аба&quot; вывести...

0
21.12.2018, 19:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2018, 19:00
Помогаю со студенческими работами здесь

Поиск максимальной длинны подстроки из одного символа. |-|ужна П0|\/|0Щ
Здравствуйте. Не могли ли вы подсказать как в данной программе, которая к слову выводит...

Поиск подстроки внутри данной строки, замена найденной подстроки на другую строку
Выполнить поиск подстроки внутри данной строки,замену найденной подстроки на другую строку Пример...

Найти длину наибольшей подстроки, которая является палиндромом
Найди палiндром Даже новорожденным известно, что палiндромом называется такая строка из букв,...

Найти номер первой максимальной по длине возрастающей последовательности значений
Всем привет! Помогите с задачей. Пример: В массиве записаны n чисел, пусть будет 10: -1 0 3 -5...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru