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

Найти в данной строке подстроку, которая является палиндромом наибольшей длины

11.12.2016, 21:31. Показов 1877. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дается строка. Найти в ней подстроку, которая является палиндромом наибольшей длины. Если их несколько, то можно вывести любую. Посчитать сложность.

Например:
abcbaaaaab -> baaaaab
bdgearlfgs -> NULL
Надеюсь, кто-нибудь может подсказать
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2016, 21:31
Ответы с готовыми решениями:

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

Найти подстроку, которая встречается в данной строке чаще всего
Итак, писал пробную городскую олимпиаду на питоне. Задания были легкие, но почему-то при тестах...

По данной строке, определите, является ли она палиндромом
По данной строке, определите, является ли она палиндромом. В принципе задача мне понятна, только с...

Найти данную подстроку в данной строке
есть две строки. ввожу "pro",дальше ввожу другую строку "fpross",если 2-ая строка содержит...

3
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
12.12.2016, 06:57 2
Лучший ответ Сообщение было отмечено AnniI как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#define MIN 3 //минимальная длина палиндрома
void srch(char*);
int main()
{
    char str[] = "abcbaaaaabaaaaab";
    srch(str);
    return 0;
}
void srch(char* ptr)
{
    char *first, *last, *N, *head, *tail, *x = NULL, *y = NULL;
    unsigned max = 0, flag = 0, count = 0;
    puts("The line:");
    for(N = ptr; *N; N++)
        putchar(*N);
    for(first = ptr; first < N - MIN; first++){
        for(last = first + MIN; last < N; last++){
            if(*last == *first){
                for(head = first, tail = last, flag = 0; tail > head; tail--, head++){
                    if(*head != *tail){
                        flag = 1;
                        break;
                    }
                }
                if(!flag){
                    count = last - first + 1;
                    if(count > max){
                        max = count;
                        x = first;
                        y = last;
                    }
                }
            }
        }
    }
    putchar('\n');
    if(!x)
        puts("Palindrome not found");
    else{
        puts("The longest palindrome:");
        for( ; x <= y; x++)
            putchar(*x);
        printf("\nhas %u symbols", max);
    }
 
}
1
0 / 0 / 0
Регистрация: 26.11.2016
Сообщений: 2
12.12.2016, 12:54  [ТС] 3
Спасибо большое! Теперь бы понять как это работает)
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
12.12.2016, 16:10 4
AnniI, указатели еще не изучали?

Добавлено через 23 минуты
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
#include <stdio.h>
#include <string.h>
#define MIN 3 //минимальная длина палиндрома
 
int main()
{
    char str[] = "qwerewqadsfghdcccczxcvbnmnbvcxzcc";
    unsigned i, j, len, head, tail, x = -1, y = -1, max = 0, flag = 0, count = 0;
    len = strlen(str);
    for(i = 0; i < len - MIN; i++)
        for(j = i + MIN; j < len; j++)
            if(str[i] == str[j]){
                for(head = i, tail = j, flag = 0; tail > head; tail--, head++){
                    if(str[head] != str[tail]){
                        flag = 1;
                        break;
                    }
                }
                if(!flag){
                    count = j - i + 1;
                    if(count > max){
                        max = count;
                        x = i;
                        y = j;
                    }
                }
            }
    putchar('\n');
    if(x < 0)
        puts("Palindrome not found");
    else{
        puts("The longest palindrome:");
        for( ; x <= y; x++)
            putchar(str[x]);
        printf("\nhas %u symbols", max);
    }
    return 0;
}
0
12.12.2016, 16:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2016, 16:10
Помогаю со студенческими работами здесь

Найти точку на данной сфере, которая является ближайшей к данной точке
Есть а б с , координаты центра сферы , x y z координаты точки за сферой , и радиус . Я понял так...

Найти точку на данной сфере, которая является ближайшей к данной точке
Есть а б с , координаты центра сферы , x y z координаты точки за сферой , и радиус . Я понял так...

Найти в строке подстроку максимальной длины
Найти в строке подстроку максимальной длины, состоящей из одного символа.

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


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

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