2015-01-29 3 views
2

Я пытаюсь решить эту проблему с помощью JS, просто используя массив.Проверка целостности символов в строке

var str="abcdefgh"; 
for (i=0;i<255;i++){ 
    arr[i]=false; 
} 
function check(){ 
    for (i=0;i<str.length;i++){ 
     if (arr[str.charCodeAt(i)]==true){ 
      return false; 
     } 
     arr[str.charCodeAt(i)]=true; 
    } 
    return true; 
} 

Я инициализирует массив фиксированного размера 256, чтобы иметь логическое значение false. Затем я устанавливаю значение для соответствующего индекса ASCII в значение true для символов в строке. И если я снова найду того же персонажа, я возвращаюсь false.

При запуске программы я получаю false, даже если строка не содержит дубликатов символов.

+0

ваш код кажется правильным, вы можете разместить тестовый случай за что он не работает? – dsharew

ответ

3

Использование объекта для более быстрого результата

function is_unique(str) { 
    var obj = {}; 
    for(var z=0;z<str.length;++z) { 
    var ch = str[z]; 
    if(obj[ch]) return false; else obj[ch] = true; 
    } 
    return true; 
} 
// test: 
console.log(is_unique("abcdefgh")); // true 
console.log(is_unique("aa")); // false 
1

использование .match() функция для каждого из символов. вычислять вхождения с использованием длины. Полагаю, это так.

(str.match(/yourChar/g) || []).length 
+1

вы должны сначала дезинформировать 'yourChar' .. потому что возможно, что он содержит специальные символы регулярных выражений. – Kokizzu

+0

btw, это отсутствует' ('в начале – Kokizzu

0

Вы используете arr[str.charCodeAt(i)], что неправильно. Это должно быть arr[str[i].charCodeAt(0)]

var arr = []; 
var str="abcdefgh"; 
for (i=0;i<255;i++){ 
    arr[i]=false; 
} 
function check(){ 
    for (i=0;i<str.length;i++){ 
     if (arr[str[i].charCodeAt(0)]==true){ 
      return false; 
     } 
     arr[str[i].charCodeAt(0)]=true; 
    } 
    console.log(arr); 
    return true; 
} 
check(); 
3

Заполните Set все символы и сравнить его размеры по длине струны:

function isUnique(str) { 
 
    return new Set(str).size == str.length; 
 
} 
 

 
console.log(isUnique('abc')); // true 
 
console.log(isUnique('abcabc')); // false

Смежные вопросы