C программа для длины самого длинного прогона в строке
В строке "run" - это подстрока, состоящая из последовательных
случаи одного и того же характера. Например, строка
"Миссисипи" содержит следующие прогоны - "ss", "ss"и " pp".
В этом вопросе, учитывая строку, вы должны вывести длина
самый длинный пробег в цепочке.
Ввод
-----
Строка, имеющая длину не более 100. Строка гарантированно будет иметь
по крайней мере, один заход.
Выход
------
Длина самого длинного пробега в строке.
Пример Ввода
------------
abbaaacccc
Пример Вывода
-------------
4
Что я уже пробовал:
#include<stdlib.h>
#include< stdio.h>
#include & lt;string.h>
#определить NO_OF_CHARS 256
int min(int a, int b);
int longestUniqueSubsttr(char *str)
{
int n = strlen(str);
int cur_len = 1; / / длина текущей подстроки
int max_len = 1; / / результат
int prev_index; / / предыдущий индекс
int i;
int * visited = (int *)malloc(sizeof(int)*NO_OF_CHARS);
/ * Инициализируйте посещенный массив как -1, -1 используется для
укажите, что персонаж еще не был посещен. */
for (i = 0; i & lt; NO_OF_CHARS; i++)
посещенный[i] = -1;
/ * Отметьте первый символ как посещенный, сохранив индекс
первого символа в посещенном массиве. */
посещенный[str[0]] = 0;
/ * Начните со второго символа. Первый символ-это
уже обработано (cur_len и max_len инициализируются
как 1, так и visited[str [0]] устанавливается */
для (i = 1; i < n; i++)
{
prev_index = посетил[стр[я]];
/* Если символ currentt отсутствует в
уже обработанная подстрока или она не является частью
текущие NRCS, затем сделайте cur_len++ */
если (prev_index == -1 || Я - cur_len &ГТ; prev_index)
cur_len++;
/* Если текущий символ присутствует в текущий момент
рассмотрите NRCS, а затем обновите NRCS, чтобы начать с
следующий символ предыдущего экземпляра. */
еще
{
/ * Кроме того, когда мы меняем NRCS, мы
следует также проверить, является ли длина
предыдущий NRCS был больше max_len или
нет.*/
если (cur_len &ГТ; max_len)
max_len = cur_len;
cur_len = я - prev_index;
}
// обновить индекс текущего символа
посетил[str[i]] = i;
}
// Сравните длину последних NRCS с max_len и
// при необходимости обновите max_len
если (cur_len &ГТ; max_len)
max_len = cur_len;
free (visited); / / свободная память, выделенная для посещения
вернуться max_len;
}
/* Функция полезности для получения как минимум двух целых чисел */
int min(int a, int b)
{
возврат (a> b)?b:a;
}
/* Программа драйвера для тестирования вышеуказанной функции */
тап_п()
{
char str [] = " ABDEFGABEF";
printf ("входная строка %s n", str);
int len = longestUniqueSubsttr(str);
printf ("длина самого длинного неповторяющегося "
"символьная подстрока - %d", len);
возвращает 0;
}
Patrice T
В чем вопрос?
xyz123123123123123123
если вы получите решение, то разместите его здесь, пожалуйста
OriginalGriff
Итак, вы учитесь в одном классе с ним и хотите скопировать одно и то же решение с общедоступного веб-сайта, о котором ваш учитель хорошо знает, как и он, и вы оба передаете его как свою собственную работу?
Какая часть этой идеи показалась вам лучшей, чем попытка сделать это самостоятельно?
Dave Kreskowiak
Отлично! Затем, когда вы и ваш одноклассник сдадите один и тот же код для задания, вы оба можете провалить задание вместе, потому что будет совершенно очевидно, что ни один из вас не написал код, который вы сдаете!