function maxUniqSubStr(str) {
if (!str) { return ''; }
var map = { };
var maxLength = 1;
var maxStart = 0;
var start = 0;
map[str[0]] = 0;
for (var i = 1, le = str.length; i < le; ++i) {
var c = str[i];
var pos = map[c];
if (pos != null && pos >= start) {
if (maxLength < i - start) {
maxStart = start;
maxLength = i - start;
}
start = pos + 1;
}
map[c] = i;
}
if (maxLength < i - start) {
maxStart = start;
maxLength = i - start;
}
return str.substr(maxStart, maxLength);
}
alert(maxUniqSubStr('abcdeahopwunshslge'));
|
рони, Poznakomlus,
у вас в ответе не подстрока ) |
Цитата:
Но опять такие нет ответа на то, в чем ищется. Пример от рони работает, ибо строка: abcdeahopwunshslge и ответ: bcdeahopwuns А теперь этим же решением, что получится если строка будет, например - abcdeaahopwunshslge. Уже не верно, так? А для входной строки dabcdeaahopwunshslge решение от Poznakomlus тоже даст не тот результат. Другими словами ответ в задаче уже сам по себе подогнан. ) |
Цитата:
|
Ребята!! Вы все такие умные :)
Уух, буду разбираться теперь Спасибо огромное за помощь!!:thanks: |
Подстрока в строке abcdeahopwunshslge
var str = 'abcdeahopwunshslge',
limit,
maxSS = '',
j,
indx,
arr = [];
for(var i = 0; i < str.length; i++) {
arr[i] = '';
j = i ;
limit = str.length;
while(j < limit) {
arr[i] += str[j];
indx = str.indexOf(str[j], j + 1);
if(indx >= 0 && limit > indx ) { limit = indx;}
j++;
}
}
for (var i = 0; i < arr.length; i++) {
if (maxSS.length < arr[i].length) { maxSS = arr[i];}
}
alert(maxSS);
|
Dilettante_Pro,
:victory: |
:write: :)
function fn(b) {
for (var c = "", f = /(\S)(?=\S+?\1)/, a = 0; a < b.length; a++)
for (var d = a + 1; d <= b.length; d++) {
var e = b.substring(a, d);
if (f.test(e)) break;
else e.length > c.length && (c = e)
}
return c
};
var str = 'abcdeahopwunshslge';
alert(fn(str));
|
рони,
Я так и знал, что появится такой вариант:victory: Я же просто реализовал алгоритм, описанный ТС в пост 3 |
Ускорил свой вариант в 10 раз :) используется массив вместо объекта для карты последних вхождений.
function maxUniqSubStr(str) {
if (!str) { return ''; }
var map = [];
for (var i = 0; i < 256; ++i) {
map[i] = -1;
}
var maxLength = 1;
var maxStart = 0;
var start = 0;
for (var i = 0, le = str.length; i < le; ++i) {
var c = str.charCodeAt(i);
var pos = map[c];
if (pos >= start) {
if (maxLength < i - start) {
maxStart = start;
maxLength = i - start;
}
start = pos + 1;
}
map[c] = i;
}
if (maxLength < i - start) {
maxStart = start;
maxLength = i - start;
}
return str.substr(maxStart, maxLength);
}
alert(maxUniqSubStr('abcdeahopwunshslge'));
|
| Часовой пояс GMT +3, время: 23:23. |