Определить минимальное количество символов,по которым можно разлечить слова.
Строка состоит из нескольких слов, разделенных пробелом. Определить минимальное количество первых символов слов, по которым можно различить слова в строке.
Входные данные: abc5 abc0 abcde abcfg Выходные данные: 4 Вот наработки:
let words = [];
let res = [];
let i;
let counter = 0;
let matrix = [];
let val1 = "abc5 abc0 abcde abcfg";
if ($('#val1').val() == '') alert('Введите данные')
else {
words = val1.split(' ');
for (let i = 0; i < words.length; i++) {
for (let j = 0; j < words[i].length; j++) {
matrix[i] = words[i].split('');
}
}
let matrxLength = matrix.length;
for (let word = 0; word <=matrxLength+1; word++) {
for (let sym = 0; sym < matrix[word].length; sym++) {
console.log(matrix[word][sym]);
if (matrix[word][sym] == matrix[word+1][sym]) {
if (res.includes(matrix[word][sym]) != true) {
console.log(res);
res.push(matrix[word][sym])
}
}
}
}
// console.log(matrix);
// console.log(res);
}
});
и еще один вариант:
for (let i = 0; i < words.length; i++) {
for (let j = 0; j < words[i].length; j++) {
matrix[i] = words[i].split('');
}
}
console.log(matrix[0][0]);
for (let word in matrix) {
for (let symbol in matrix[word]) {
if (matrix[word][symbol]==matrix[++word][symbol]){
if (res.includes(matrix[word][symbol])!=true){
console.log(res);
res.push(matrix[word][symbol])
}
}
}
}
};
console.table(matrix);
console.log(res);
});
|
Hokage777,
вариант ...
let val1 = "abc5 abc0 abcde abcfg";
const fn = str => {
let words = str.split(/\s+/).sort((a,b)=> a.length - b.length);
let word = words[0];
for(let a of words){
a = [...a];
let temp = "";
for(b of word){
if(b == a.shift()) temp += b;
else break;
}
if(temp) word = temp;
else return 0
}
return word.length + 1
}
console.log(fn(val1))
|
Цитата:
вариант рони соответствует первому условию, т.е. для строки 'a5 abc0 abcde abcfg' он вернет 2, чего достаточно, чтобы различить первое и второе слово, но не хватит при сравнении 2 и 3 слов |
Цитата:
let val1 = "abc5 abc0 abcde abcfg";
let val2 = "a5 abc0 abcde abcfg";
const fn = str => {
let words = str.split(/\s+/);
let length = Math.max(...words.map(_=>_.length)), i = 0;
k: for (; i < length; i++) {
let temp = "";
for(let a of words){
if (a[i] !== void 0){
if(temp.includes(a[i])) continue k;
temp += a[i];
}
}
return ++i
}
return i
}
console.log(fn(val1))
console.log(fn(val2))
|
var s = ' abcde abc5 abc0 abcfg'.trim(),
w = s.split(/\s+/);
for(var i=1; i < w[0].length; ++i) if(s.match(new RegExp('\\b'+w[0].substr(0, i), 'g')).length < w.length) break;
console.log(i)
|
И ещё один вариант:
var str = " abc5 abc0 abcde abcfg"; var match = str.match(/^\s*(\S*)\S*(?:\s+\1\S*)*\s*$/); var length = match ? match[1].length + 1 : 0; console.log(length); |
Malleys,
var str = " abc5 abc0 abcde abcdg"; var match = str.match(/^\s*(\S*)\S*(?:\s+\1\S*)*\s*$/); var length = match ? match[1].length + 1 : 0; console.log(length); //4 а нужно 5 |
Цитата:
Получается нужно найти длину не наименьшей части подстроки, которая встречается в каждом слове, а такую длину L подстроки, которая однозначно определяла бы любое слово, в случае, если взять в нём не менее L символов. Если пример от laimas запустить с s = ' w abcde abc5 abc0 abcfg', то он тоже показывает удивительнейшие вещи! Например, то, что человек, пропагандирующий уникальные идентификаторы, может продвигать решение, где они как раз-таки и не уникальные! (Нужно ведь идентифицировать слово) Если поглядеть в пример от рони то совершенно не понятно, почему там получается 4, когда рони упорно провозглашает, что Цитата:
Цитата:
И laimas опубликовал решение раньше, а вы превзошли в правдивости всех! рони, так значит в сообщениях №2, 5 и 6 находят длину наименьшей части подстроки, которая встречается в каждом слове? рони, а вы потрясающе деструктурируете! Вот вычисление такой длины L подстроки, которая однозначно определяла бы любое слово, в случае, если взять в нём не менее L символов... (без деструктуризации!)
function fn(str) {
var length = 0;
str.trim().split(/\s+/).sort(function(as, bs) {
var i = Array.prototype.findIndex.call(as, (a,i) => bs[i] !== a)
length = Math.max(length, 1 + i)
return as > bs ? 1 : -1
})
return length
}
console.log(
fn("abc5 abc0 abcde abcfg"),
fn("a5 abc0 abcde abcfg"),
fn(" abcde abc5 abc0 abcfg")
) // включает все строки, упоминавшиеся в теме
Удивительно, упорно получается 4. |
Цитата:
|
Цитата:
Цитата:
что не так с результатом 5!!! если ваш новый код даёт тоже 5!!!
function fn(str) {
var length = 0;
str.trim().split(/\s+/).sort(function(as, bs) {
var i = Array.prototype.findIndex.call(as, (a,i) => bs[i] !== a)
length = Math.max(length, 1 + i)
return as > bs ? 1 : -1
})
return length
}
console.log(
fn(" abc5 abc0 abcde abcdg")
) // 5
P.S. Malleys, вероятно вы не заметили разницу в строке пост #7 и пост #6 |
| Часовой пояс GMT +3, время: 22:57. |