Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 17.02.2017, 00:36
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

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'));
Ответить с цитированием
  #12 (permalink)  
Старый 17.02.2017, 00:38
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

рони, Poznakomlus,

у вас в ответе не подстрока )
Ответить с цитированием
  #13 (permalink)  
Старый 17.02.2017, 01:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от white_raven
Именно в таком указано в примере к задаче.
Значит это условия, а "что тут произошло", это разбор регулярными выражениями, и придется пояснять куратору по этому.

Но опять такие нет ответа на то, в чем ищется. Пример от рони работает, ибо

строка: abcdeahopwunshslge
и
ответ: bcdeahopwuns

А теперь этим же решением, что получится если строка будет, например - abcdeaahopwunshslge. Уже не верно, так? А для входной строки dabcdeaahopwunshslge решение от Poznakomlus тоже даст не тот результат.

Другими словами ответ в задаче уже сам по себе подогнан. )

Последний раз редактировалось laimas, 17.02.2017 в 01:03.
Ответить с цитированием
  #14 (permalink)  
Старый 17.02.2017, 01:05
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от white_raven
максимальную УНИКАЛЬНУЮ подстроку
Это будет исходное слово.
Ответить с цитированием
  #15 (permalink)  
Старый 17.02.2017, 02:53
Интересующийся
Отправить личное сообщение для white_raven Посмотреть профиль Найти все сообщения от white_raven
 
Регистрация: 23.11.2016
Сообщений: 19

Ребята!! Вы все такие умные
Уух, буду разбираться теперь

Спасибо огромное за помощь!!
Ответить с цитированием
  #16 (permalink)  
Старый 17.02.2017, 13:06
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Подстрока в строке 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, 17.02.2017 в 19:03.
Ответить с цитированием
  #17 (permalink)  
Старый 17.02.2017, 13:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Dilettante_Pro,
Ответить с цитированием
  #18 (permalink)  
Старый 17.02.2017, 14:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109


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));
Ответить с цитированием
  #19 (permalink)  
Старый 17.02.2017, 15:33
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

рони,
Я так и знал, что появится такой вариант
Я же просто реализовал алгоритм, описанный ТС в пост 3
Ответить с цитированием
  #20 (permalink)  
Старый 17.02.2017, 16:26
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Ускорил свой вариант в 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'));

Последний раз редактировалось Alexandroppolus, 17.02.2017 в 16:39.
Ответить с цитированием
Ответ



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

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


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