Как сравнить каждый символ строки с каждым

145
25 декабря 2019, 05:30

Есть строка, и надо написать алгоритм,который проверяет,есть ли в строке два одинаковых символа.

var stt = 'ABC';
    var i;
    var a;
   for(i = 0; i<stt.length;i++) {
       for(a = 1; a<stt.length; a++) {
         if(stt.charAt(i) == stt.charAt(a)) {
             console.log('true');
         }
       }
   }

Но дело в том,что сравниваются два одних и тех же элемента и фактически,это выглядит так

if(stt.charAt(1) == stt.charAt(1)) {
    console.log('true'); }
Answer 1

const foo = str => /(.).*\1/.test(str);  
 
// проверка 
['ABC', 'AABC', 'ABbC', 'ABCAD'].forEach(s => console.log(`'${s}': ${foo(s)}`)); 

Еще простой вариант:

const bar = str => str.length !== (new Set(str)).size; 

Алгоритм (не тех выражений которые выше!), естесственно на JS, для краткости:

function baz(str) {
  const len = str.length; 
  for (let c, i = 0; i < len; i++) {
    c = str.charAt(i); 
    for (let j = i + 1; j < len; j++) {
      if (str.charAt(j) === c)
        return true; 
    }
  }
  return false; 
}
Answer 2
var stt = 'asfafgadgjkasjfkladfkgjdflkgjkldfgj';
var temp = stt; // переносим во временную переменную
var exist = false; // выставляем флаг который будет определять есть ли в строке одинаковые символы
for(i = 0; i < temp.length; i++){ // тут все ясно должно быть идем по строке
    for(j = i+1; j < temp.length; j++){ // проходим все символы от текущего до конца строки для поиска одинаковых символов
        if(temp[i] == temp[j]){ // само сравнение
            exist = true; // если символы одинаковые переводим флаг в true
            temp = temp.split(temp[i]).join(''); // удаляем все одинаковые символы из временной строки(не обьязательно)
        }
    }
}
console.log(exist);

Для оптимизации можно во второй цыкл break закинуть)

Answer 3

Я бы так сделал:

// разбиваем строку на символы и применяем свертку 
let counts = 'ABBCA'.split("").reduce((a, c) => { 
  // считаем символы в аккумуляторе 
  return (a[c] = ++a[c] || 1) && a; 
},{}); 
 
// ищем в результате свертки счетчик со значением больше 1  
let result = Object.values(counts).filter(i => i != 1).length > 0; 
 
console.log(counts) 
console.log(result)

READ ALSO
Работа с глобальным объектом [дубликат]

Работа с глобальным объектом [дубликат]

Перешёл на mongoDB и так получилось, что найденные данные мне нужно записать в объект thisbuyer, но это не работает

123
Как сравнить две длины массива?

Как сравнить две длины массива?

Как сравнить две длины массива и выполнить функцию?

120
JS получить имя фала из URL

JS получить имя фала из URL

Подскажите как получить название файла

116
Реализация поиска на странице с помощью фильтрации массива, не обращая внимания на раскладку клавиатуры VUE JS

Реализация поиска на странице с помощью фильтрации массива, не обращая внимания на раскладку клавиатуры VUE JS

Есть функция для поискаСейчас фильтрация идет по словам с соответствующей языковой раскладкой клавиатуры

125