Форум программистов, компьютерный форум CyberForum.ru

В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз - C++

Восстановить пароль Регистрация
 
MilitaNt
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 21
16.06.2012, 11:31     В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз #1
Здравствуйте. Нужна ваша помощь решить данную задачу, буду очень благодарен...

В заданной строке символов из заглавных латинских букв найти подстроку, которая включает наибольшее количество букв, встречающихся в этой подстроке в единственном экземпляре. Если таких строк несколько, выдать наименьшую по алфавиту.
Ввод из файла INPUT.TXT. В первой строке записана длина заданной строки N (1 ≤ N ≤10^6). Во второй строке - N заглавных латинских букв, определяющих заданную строку.
Вывод в файл OUTPUT.TXT. В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз.
Примеры
Ввод 1 Ввод 2 Ввод 3
5 5 6
ABBAC OLYMP DACDAC
Вывод 1 Вывод 2 Вывод 3
BAC OLYMP ACD

Добавлено через 14 минут
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2012, 11:31     В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз
Посмотрите здесь:

Найти в тексте все слова с наибольшим количеством гласных букв русского алфавита C++
C++ Вывод слова с наибольшим количеством гласных букв
C++ Найти слово с наибольшим количеством гласных букв
C++ Вывести на экран слово с наибольшим количеством гласных букв
C++ Поменять в массиве местами строку с наибольшим и строку с наименьшим количеством различных элементов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
16.06.2012, 14:49     В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз #2
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
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
 
#define N 256
 
bool exists(char* temp);
 
int main()
{
    static char psz[256] = "ABBAC OLYMP DACDAC\0";
 
    printf("%s\n",psz);
 
    int x = 0;
    char** ppsz = new char*[N];
    memset((void*)ppsz,0x00, 4 * N);
    for (char* token = strtok(psz," "); 
        token != NULL; token = strtok(NULL," "))
    {
        if (!exists(token)) 
        { 
            ppsz[x] = new char[256]; 
            strcpy(ppsz[x++],token); 
            continue; 
        }
 
        for (int m = 0; token[m] != '\0'; m++)
            for (int q = 1; q < strlen(token); q++)
            {
                char temp[256] = "\0"; int n = 0;
                for (int i = m; i <= q; i++)
                    temp[n++] = token[i];
 
                char* psz2 = new char[256];
                strcpy(psz2, token);
 
                char* buf = psz2; int count = 0;
                while((buf = strstr(buf,temp)) != NULL && *buf != '\0')
                { count++; *buf++; }
 
                if (count <= 1 && strlen(temp) > 2 && !exists(temp))  
                {
                    ppsz[x] = new char[256];
                    strcpy(ppsz[x++], temp);
                }
            }
    }
 
    for (int z = 0; ppsz[z] != NULL; z++)
        printf("%s ",ppsz[z]);
    printf("\n");
 
    _getch();
 
    return 0;
}
 
bool exists(char* temp)
{
    bool found = false;
    for (int v = 0; temp[v] != '\0' && !found; v++)
    {
        int cnt = 1;
        for (int b = v+1; temp[b] != '\0'; b++)
            if (temp[b] == temp[v]) cnt++;
        if (cnt > 1) found = true;
    }
 
    return found;
}
http://liveworkspace.org/code/22349a...51972077ae7992
Миниатюры
В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз  
MilitaNt
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 21
17.06.2012, 01:17  [ТС]     В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз #3
zitxbit, спасибо)
только вот на этом тесте DACDAC выводит две строки, а нужно выдать наименьшую из них, куда вставить данное условие?)
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
17.06.2012, 12:27     В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз #4
Вставить условие вы не можете, поскольку критерий поиска подстроки справедлив и для "ACD" и для "CDA", эти обе подстроки не содержат повторяющихся символов.
Yandex
Объявления
17.06.2012, 12:27     В единственную строку вывести подстроку с наибольшим количеством букв, встречающихся один раз
Ответ Создать тему
Опции темы

Текущее время: 01:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru