/**
* 描述:
* 实现一个算法,确定一个字符串的所有字符是否全都不同。
* 假使不允许使用额外的数据结构,又该如何处理?
* 细节:1)unicode字符集还是ASCII字符集
* 2)若是ASCII编码,长度大于256,则直接返回false
*/
function no_multiple_str (str) { if(str.length > 256) return false; var tmp = {}; for(var i=0; i<str.length; i++){ var char = str.charAt(i); if(tmp[char]) { return false; } else { tmp[char] = char; } } return true; } var str = "rept"; console.log(‘no multiple char --> ‘ + no_multiple_str(str).toString());
/**
*使用位运算,减少空间复杂度
*/
function no_multiple_str_2 (str) { if(str.length > 256) return false; var checker = 0; for(var i=0; i<str.length; i++){ var value = str.charCodeAt(i) - ‘a‘.charCodeAt(); console.log(checker & (1 << value)); if((checker & (1 << value)) > 0) { return false; } checker |= (1 << value); } return true; } var str = "repte"; console.log(‘no multiple char --> ‘ + no_multiple_str_2(str).toString());
/**
*最基本方法
*循环比较
*/
function no_multiple_str_3(str) { if(str.length > 256) return false; for(var i=0; i<str.length-1; i++){ for(var j=i+1; j<str.length; j++) { if(str.charAt(i) == str.charAt(j)) { return false; } } } return true; } var str = "rept"; console.log(‘no multiple char --> ‘ + no_multiple_str_3(str).toString());
时间: 2024-10-15 15:37:04