检查字符串中的字符是否都是唯一的
Checking if the characters in a string are all unique
我正在尝试仅使用数组来使用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 返回。
用所有字符填充Set
,并将其大小与字符串的长度进行比较:
function isUnique(str) {
return new Set(str).size == str.length;
}
console.log(isUnique('abc')); // true
console.log(isUnique('abcabc')); // false
使用对象以获得更快的结果
function is_unique(str) {
var obj = {};
for (var z = 0; z < str.length; ++z) {
var ch = str[z];
if (obj[ch]) return false;
obj[ch] = true;
}
return true;
}
console.log(is_unique("abcdefgh")); // true
console.log(is_unique("aa")); // false
每个字符使用 .match() 函数。 使用长度计算出现次数。猜猜就是这样。
(str.match(/yourChar/g) || []).length
我们也可以尝试使用indexOf
和lastIndexOf
方法:
function stringIsUnique(input) {
for (i = 0; i < input.length; i++) {
if (input.indexOf(input[i]) !== input.lastIndexOf(input[i])) {
return false;
}
}
return true;
}
你正在使用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();
时间复杂度 = O(n)空间复杂度 = O(n)
const isUnique = (str) => {
let charCount = {};
for(let i = 0; i < str.length; i++) {
if(charCount[str[i]]){
return false;
}
charCount[str[i]] = true;
}
return true;
}
const isUniqueCheekyVersion = (str) => {
return new Set(str).size === str.length;
}
解决方案 3: 将字符串转换为字符数组,对它们进行排序,然后遍历它们以检查相邻的元素,如果有匹配项返回 false 否则为 true
解决方案 4: 它类似于解决方案 1,除了我们使用在最新版本的 javascript 中引入的 Set 数据结构
// no additional Data structure is required. we can use naive solution
// Time Complexity:O(n^2)
function isUnique(str) {
for (let i = 0; i < str.length; i++) {
for (let j = 1 + i; j < str.length; j++) {
if (str[i] === str[j]) {
return false;
}
}
}
return true;
}
// if you can use additional Data structure
// Time Complexity:O(n)
function isUniqueSecondMethos(str) {
let dup_str = new Set();
for (let i = 0; i < str.length; i++) {
if (dup_str.has(str[i])) {
return false;
}
dup_str.add(str[i]);
}
return true;
}
console.log(isUniqueSecondMethos('hello'));
使用对象作为映射器
function uniqueCharacterString(inputString) {
const characterMap = {};
let areCharactersUnique = true;
inputString.trim().split("").map((ch)=>{
if(characterMap[ch]===undefined) {
characterMap[ch] = 1;
} else {
areCharactersUnique = false;
}
})
return areCharactersUnique;
}
算法
*1. 步骤 -第一个字符串是 ->堆栈 *
*2.步进字符串隐蔽到字符数组 *
3. 步骤 - 在数组 ['s'、't'、'a'、'c'、'k'] 中使用迭代
4. step - if(beginElement !== nextElement){return true}else{return false}
实现代码
function uniqueChars(string){
var charArray = Array.from(string) //convert charArray
for(var i=0;i<charArray.length;i++){
if(charArray[i] !== charArray[i+1]){
return true
}
else{
return false
}
}
}
var string ="stack"
console.log(uniqueChars(string))
时间复杂度O(nlogn)
算法
- 计算字母的频率,例如
'Mozilla'
将返回Object{ M: 1, o: 1, z: 1, i: 1, l: 2, a: 1 }
.请注意,-~undefined
上的按位 NOT 运算符 (~) 是1
,-~1
是2
,-~2
是3
等。 - 当所有匹配项仅出现一次时返回
true
。
实现代码
var isUnique = (str) => {
const hash = {};
for (const key of str) {
hash[key] = -~hash[key];
}
return Object.values(hash).every((t) => t === 1);
};
console.log(isUnique('Mozilla'));
console.log(isUnique('Firefox'));
<小时 />
另一种选择可能是:
var isUnique = (str) => {
const hash = {};
for (const i in str) {
if (hash[str[i]]) return false;
hash[str[i]] = true;
}
return true;
};
console.log(isUnique('Mozilla'));
console.log(isUnique('Firefox'));
要使一个高效,您可以使用 简单的哈希映射
let isUnique = (s) => {
let ar = [...s];
let check = {};
for (let a of ar) {
if (!check[a]) {
check[a] = 1;
} else {
return false
}
}
return true;
}
alert("isUnique : "+isUnique("kailu"));
时间复杂度和空间复杂度
使用 ES6
let isUnique = (s)=>{
return new Set([...s]).size == s.length;
}
console.log("using ES6 : ",isUnique("kailu"));
我们可以使用字符串的拆分方法:
const checkString = (str) => {
let isUniq = true;
for (let i = 0; i < str.length; i++) {
if (str.split(str[i]).length > 2) {
isUniq = false;
break;
}
}
return isUniq;
};
console.log(checkString("abcdefgh")); //true
console.log(checkString("aa")); //false
- 使用onkeyup JS事件检查输入的值是否唯一
- 检查字符串中的字符是否都是唯一的
- 为什么尽管查询查找记录,mysql 数据没有拉入表单,查找值是否需要是唯一的
- chase.com 登录流是否使用 JavaScript 中的设备唯一标识符
- Node.js with Geddy:geddy.string.uuid(x) 是否确保字符串是唯一的
- 如果元素是唯一的,使用 javascript 更改 ID 是否是一种可以的做法
- 是否解析对象ID'它在不同类别中是否唯一
- JavaScript检查数组中是否有唯一的东西
- Javascript:确定字符串中的所有字符是否都是唯一的,如果不是,则删除重复字符
- console.log是否是api's返回内容的唯一选项?
- 如何循环遍历一个对象并测试它是否为唯一存在的键
- 将具有唯一id的对象集合存储为以id作为键的关联数组,而不是作为常规数组,是否存在缺陷?
- WorkLight是否提供了唯一的id ?
- 是否有可能在不使用唯一对象属性的情况下区分两个对象?
- 是否有一种更简单的方法来使用lodash从多个对象集合中构造一个唯一值的数组?
- 检查电子邮件地址是否为系统唯一
- 在应用程序中使用唯一的方法名是否很好
- 是否可以将一个唯一的CSS类附加到多个<李>元素,或者使用Jquery对它们重新排序
- angularJS指令名是否唯一?
- 当所有字段都具有唯一id时,我如何知道复选框是否被选中