如何从输入单词中获得精确的2个字符,并用香草JavaScript输出该字符


var exactTwo = (word) => 
{
`crate from word a string of char` 
var arr = [];
var arr = word.split("");
var result = [];
`it goes through arry and looks for a copy`
for (var i = 0; i < arr.length; i++) 
{
for (var j = 0; j < arr.length; j++) 
{   
if (arr[i] === arr[j]) 
{
`it puts  the output to  result[]`
result.push(arr[i])
}
}
}
}      
console.log(exactTwo("ABAACCBA"));
console.log(exactTwo("ABC"));
console.log(exactTwo("ABBCCA"));

我对代码第一部分的输出从它到达另一个循环时开始重复。我该怎么做?奥尔索洞的任务是这样的:

在输入字符串中,找到恰好出现2次的第一个字符。

示例:

ABAACCBA->B

ABC->">

ABBCCA->B

这应该对您有效。

function extractFirstDuplicatedString(string) {
var stringRepetition = {};
for (var i=0; i<string.length;i++ ) {
var character = string.charAt(i);
if (stringRepetition[character]) {
stringRepetition[character]++;
} else {
stringRepetition[character] = 1;
}
}
for (var chara in stringRepetition ) {
if( 2 == stringRepetition[chara] ) {
return chara;
}
}
return "";
}

您可以循环到每个字符,然后是Array.filter(),以过滤出相同的字符,然后获得与两个字符长度完全匹配的长度:

var exactTwo = (word) => {
var wordSplit = word.split('');
var match = '';
for(var i=0; i<wordSplit.length; i++){
var length = wordSplit.filter(character => character === wordSplit[i]).length;
if(length === 2){
match = wordSplit[i];
break;
}
}
return match;
}
console.log(exactTwo("ABAACCBA"));
console.log(exactTwo("ABC"));
console.log(exactTwo("ABBCCA"));

预期的答案似乎有冲突。有两种可能的输出情况

情况1:输出字符串中正好出现2次的第一个字符

var exactTwo = (word) => {
let chars = [];
let charMap = {};
let arr = word.split("");
arr.forEach(a => {
if(charMap[a]) charMap[a] += 1
else { charMap[a] = 1; chars.push(a);}
});
let result = chars.find(c => charMap[c] === 2);
return result ? result : "";
}
console.log(exactTwo("ABAACCBA")); // B
console.log(exactTwo("ABC")); // ""
console.log(exactTwo("ABBCCA")); // A

情况2:输出字符串中第一个出现精确2次的字符

var exactTwo = (word) => {
let chars = [];
let charMap = {};
let arr = word.split("");
arr.forEach(a => {
if(charMap[a]) charMap[a] += 1
else charMap[a] = 1;
if(charMap[a] === 2) chars.push(a)
else if(charMap[a] > 2) chars.splice(chars.indexOf(a),1)
});
return chars.length ? chars[0] : "";
}
console.log(exactTwo("ABAACCBA")); // C
console.log(exactTwo("ABC")); // ""
console.log(exactTwo("ABBCCA")); // B

您可以使用forEachMapsome进行O(n(次。如下所示。

function exactTwo(a) {
var myMap = new Map();
var array = a.split("");
var result="";
array.forEach(function(x){
var y = myMap.get(x);
if(y) {
myMap.set(x, y+1)
}
else {
myMap.set(x, 1);
}
});
array.some(function(x){
var y = myMap.get(x);
if(y === 2) {
result = x;
return true;
}
});
return result;
}
console.log(exactTwo("ABAACCBA"));
console.log(exactTwo("ABC"));
console.log(exactTwo("ABBCCA"));

最新更新