Уникальная подстрока
Добрый вечер, форумчане!
Новичок просит помощи в решении следующей задачи (не прошу за меня решить - просто хотя бы подсказать, в какую сторону смотреть): Необходимо реализовать функцию, которая принимает строку, состоящую из латинских букв. Функция должна вернуть максимальную УНИКАЛЬНУЮ подстроку. Пример: строка: abcdeahopwunshslge ответ: bcdeahopwuns Цикл, substring, indexOf.. - не собирается. Пожалуйста помогите. |
Именно в таком порядке - 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) |
Спасибо, что откликнулись!
Именно в таком.. Я так поняла, что искомая подстрока подбирается с первого символа, до первого повторяющегося, а потом из этих вариантов выбирается максимально длинный, т.е.: 'abcdeahopwunshslge', а в ней: abcde bcdeahopwuns cdeahopwuns deahopwuns eahopwuns и т.д. |
:)
var str = "abcdeahopwunshslge"; myRe = /(\S)(?![\s\S]+?\1)/gm; alert(str.match(myRe).join("")); |
Цитата:
|
!!! У меня сейчас глаза сломаются :yes:
Спасибо большое!! Но вы не могли бы хотя бы в 2-х словах объяснить, что произошло? :)) |
Я и не знаю, такая задача (
|
Цитата:
Представьте себе, что у вас в ящике фрукты. Ваша задача взять из него только по одному каждого вида. Какие фрукты в нем вы не знаете, пока не откроете ящик. Можно ли перед его открытием задать условие брать фрукты из ящика в обязательной последовательности: яблоко, груша? Если этих фруктов в ящике не будет, то возникает коллизия - задача взять по одному фрукту выполнима, но в тоже время задача в целом не будет не выполнима так как нельзя будет разложить их в требуемом порядке. В вашем примере символы исходной строки также неизвестны, а значит задание порядка в выводе именно таким bcdeahopwuns создает коллизию. А если так задается, значит и решать никакой задачи не надо, ответ уже задан в порядке - bcdeahopwuns. С неизвестной входной строкой не создать коллизии можно только в том случае, если порядок в результате будет описан условиями или закономерностями. Применительно к вашему порядку, например - первый символ алфавита (а), если только он есть, должен следовать в порядке четвертым и т.п. А иначе никак (хотя это от лукавого, в контексте массивов и это можно сделать, но должно быть условие). Цитата:
|
Вы, конечно, правы, спасибо, что всё так подробно расписали. Я же потому и обратилась с вопросом, потому что непонятна задача.
Но я дословно представила здесь условия и пример. Цитата:
А что произошло - это я об этом: Цитата:
|
alert(Array.from(new Set("abcdeahopwunshslge")).join('')); :) |
Часовой пояс GMT +3, время: 11:25. |