B@rmaley.e><e,
Верно подмечено. (-: |
Цитата:
Это явный бред! Или может здесь кто-то панически боится циклов и микробов? Цитата:
|
Sweet, переделай в своём варианте второй цикл например под рекурсию и он будет соответствовать всем условиям =))
|
Sweet, таково условие - один цикл.
Vulkan, это все ерунда. Под одним циклом подразумевалась сложность O(n) (простой цикл по всем элементам строки). А поиск лазеек и дыр в правилах оставим юристам. |
Ой, извините! Я думал про один цикл - это не изначальное условие.
Впрочем, есть не один способ перебора без цикла, например, вот (внизу). Или вот, например: String.prototype.index = function(x){ var string = this, l1 = this.length, l2 = x.length; for(var i = 0; i < l1; i++) if(this[i] === x[0] && (function(){ var count = 0; return (function(){ if( count === l2 ) return true; if( string[i + count] === x[count++] ) return arguments.callee(); return false; })(); }())) return i; return -1; }; |
Sweet,
Цитата:
|
Продолжаю утверждать, что это простой алгоритм, который не требует особых хаков в стиле JS и который решается одним циклом.
Пусть даны СТРОКА1 и СТРОКА2. Найти позицию вхождения СТРОКА2 в СТРОКА1 Выполните цикл не более чем i < (длина СТРОКА1 - (длина СТРОКА2 / 2)) Сравнивайте начальный (0) и конечный символы (длина СТРОКА2 - 1) из СТРОКА2 с текущими позициями в СТРОКА1 (i) и (i + длина СТРОКА2 - 1), соответственно. Повторяйте сравнение. |
Т.к. теоретически точка начала совпадений мот быть в любой(каждой) позиции простым циклом нельзя(без встроенных функций[любых]).
Мой вариант: String.prototype.at = function(str) { var tl = this.length, sl = str.length; if(tl >= sl) { for(var i=0, j=0; i<tl; i++) { if(this[i] == str[j]) { ++j; if(sl == j) {return ++i-j;} } else{ if(this[i] == str[0]) {j=1;} else {i-=j; j=0;} } } return -1; } else { return -1; } } var s1 = 'aababababaO_o', l1 = 'ababaO', l2 = 'abac', l3 = 'aa', l4 = 'O_o'; alert( [ [s1.at(l1), s1.indexOf(l1)], [s1.at(l2), s1.indexOf(l2)], [s1.at(l3), s1.indexOf(l3)], [s1.at(l4), s1.indexOf(l4)] ].join('\n') ); |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 14:33. |