Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2017, 19:44
Интересующийся
Отправить личное сообщение для white_raven Посмотреть профиль Найти все сообщения от white_raven
 
Регистрация: 23.11.2016
Сообщений: 19

Уникальная подстрока
Добрый вечер, форумчане!
Новичок просит помощи в решении следующей задачи (не прошу за меня решить - просто хотя бы подсказать, в какую сторону смотреть):

Необходимо реализовать функцию, которая принимает строку, состоящую из латинских букв. Функция должна вернуть максимальную УНИКАЛЬНУЮ подстроку.
Пример:
строка: abcdeahopwunshslge
ответ: bcdeahopwuns

Цикл, substring, indexOf.. - не собирается.
Пожалуйста помогите.
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2017, 20:54
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Именно в таком порядке - bcdeahopwuns? Может так?

var s = 'abcdeahopwunshslge', u;

u = s.split('').reduce(function(p, c, i, a) {
    if(!~p.indexOf(c)) p.push(c);
    return p
}, []).join('');

alert(u)
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2017, 21:06
Интересующийся
Отправить личное сообщение для white_raven Посмотреть профиль Найти все сообщения от white_raven
 
Регистрация: 23.11.2016
Сообщений: 19

Спасибо, что откликнулись!
Именно в таком..
Я так поняла, что искомая подстрока подбирается с первого символа, до первого повторяющегося, а потом из этих вариантов выбирается максимально длинный, т.е.:
'abcdeahopwunshslge', а в ней:
abcde
bcdeahopwuns
cdeahopwuns
deahopwuns
eahopwuns
и т.д.
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2017, 21:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103


var str = "abcdeahopwunshslge";
myRe = /(\S)(?![\s\S]+?\1)/gm;
alert(str.match(myRe).join(""));
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2017, 21:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от white_raven
Именно в таком..
Ну если именно в таком, то как задать порядок в результате, не зная что в исходной строке?
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2017, 21:39
Интересующийся
Отправить личное сообщение для white_raven Посмотреть профиль Найти все сообщения от white_raven
 
Регистрация: 23.11.2016
Сообщений: 19

!!! У меня сейчас глаза сломаются
Спасибо большое!! Но вы не могли бы хотя бы в 2-х словах объяснить, что произошло? )
Ответить с цитированием
  #7 (permalink)  
Старый 16.02.2017, 21:41
Интересующийся
Отправить личное сообщение для white_raven Посмотреть профиль Найти все сообщения от white_raven
 
Регистрация: 23.11.2016
Сообщений: 19

Я и не знаю, такая задача (
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2017, 22:59
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от white_raven
Я и не знаю, такая задача
Не знаем чего, ответа на вопрос "можно ли задать порядок неизвестного"?

Представьте себе, что у вас в ящике фрукты. Ваша задача взять из него только по одному каждого вида. Какие фрукты в нем вы не знаете, пока не откроете ящик. Можно ли перед его открытием задать условие брать фрукты из ящика в обязательной последовательности: яблоко, груша?

Если этих фруктов в ящике не будет, то возникает коллизия - задача взять по одному фрукту выполнима, но в тоже время задача в целом не будет не выполнима так как нельзя будет разложить их в требуемом порядке.

В вашем примере символы исходной строки также неизвестны, а значит задание порядка в выводе именно таким bcdeahopwuns создает коллизию. А если так задается, значит и решать никакой задачи не надо, ответ уже задан в порядке - bcdeahopwuns.

С неизвестной входной строкой не создать коллизии можно только в том случае, если порядок в результате будет описан условиями или закономерностями. Применительно к вашему порядку, например - первый символ алфавита (а), если только он есть, должен следовать в порядке четвертым и т.п. А иначе никак (хотя это от лукавого, в контексте массивов и это можно сделать, но должно быть условие).

Сообщение от white_raven
Но вы не могли бы хотя бы в 2-х словах объяснить, что произошло?
А что произошло?

Последний раз редактировалось laimas, 16.02.2017 в 23:07.
Ответить с цитированием
  #9 (permalink)  
Старый 16.02.2017, 23:54
Интересующийся
Отправить личное сообщение для white_raven Посмотреть профиль Найти все сообщения от white_raven
 
Регистрация: 23.11.2016
Сообщений: 19

Вы, конечно, правы, спасибо, что всё так подробно расписали. Я же потому и обратилась с вопросом, потому что непонятна задача.
Но я дословно представила здесь условия и пример.
Сообщение от laimas
Именно в таком порядке - bcdeahopwuns?
Именно в таком указано в примере к задаче. А если вставить другие буквы, то и порядок будет другим - если Вы про это
А что произошло - это я об этом:
Сообщение от рони

var str = "abcdeahopwunshslge";
myRe = /(\S)(?![\s\S]+?\1)/gm;

alert(str.match(myRe).join(""));
Ответить с цитированием
  #10 (permalink)  
Старый 17.02.2017, 00:26
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

alert(Array.from(new Set("abcdeahopwunshslge")).join(''));

Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить что подстрока, в конкретной позиции, соответствует указанной строке? aRpi Общие вопросы Javascript 3 03.10.2011 14:22