拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何找到重复字符串的数量

如何找到重复字符串的数量

白鹭 - 2022-03-11 1970 0 0

const repeat= (nums) =>{ //* Done
    let ans = []
    for(let i = 0; i< nums.length; i  ){
      if(nums[i] === nums[i 1]){
         if(ans[ans.length -1] !== nums[i]){
            ans.push(nums[i])
         }
      } 
    }
    return ans.length 
}

console.log(repeat(['nsmg33de1','nsmg33de1','2211,','2211','1234','1234']))

在这个例子中,这个函式似乎无法正常作业,阵列中有 3 个重复的字符串,但它会输出 2

uj5u.com热心网友回复:

[我希望这会对您有所帮助,首先将给定的字符串转换为阵列。要做到这一点,请使用string.split(""). 其次,创建一个将单词存盘为键并计数为值的映射。

现在遍历 stringArray 并将当前单词存盘到地图中。并在每次找到单词时增加单词的计数。

检查以下链接][1]

let words = "I am not gonna live forever, but I wanna live while I am alive";

function countRepeatedWords(sentence) {
  let words = sentence.split(" ");
  let wordMap = {};

  for (let i = 0; i < words.length; i  ) {
    let currentWordCount = wordMap[words[i]];
    let count = currentWordCount ? currentWordCount : 0;
    wordMap[words[i]] = count   1;
  }
  return wordMap;
}

console.log(countRepeatedWords(words));

uj5u.com热心网友回复:

取决于你想要什么价值?如果您想要已发生的重复数量,您可以将您的串列转换为一个 Set 以洗掉所有重复,然后计算该集合与原始串列之间的大小差异,如下所示:

function repeat(values) {
  return values.length - new Set(values).size;
}

否则,如果您想知道有多少项目至少有 1 个重复,那将是一个不同的故事。

为此,您可以将集合转换为阵列,然后在阵列中多次找到该值的每个值上映射 1,对所有其他值映射 0。之后,您可以通过将所有这些值加在一起来减少此阵列。像这样:

function repeat(values) {
  return [...new Set(values)].map(v => values.filter(o => o == v).length > 1 ? 1 : 0).reduce((a, b) => a   b);
}

uj5u.com热心网友回复:

我把它放在控制台中。不是世界上最好的算法,但我认为这就是你想要做的:

const getCountOfDuplicates = (items) => {
   const count = {};
   
   items.forEach(item => {   
     if(count[item] && count[item] > 0) {
        count[item]  ;
     } else {
        count[item] = 1;
     }
   });

    return Object.values(count).reduce((acc, value) => {
        if(value > 1) {
        acc  ;
      }
      
      return acc;
    }, 0);
};

console.log('results 1', getCountOfDuplicates(['1','2','3','4','1','2','3','5', '6', '6', '7'])); // Output: "results 1", 4
console.log('results 2', getCountOfDuplicates(['nsmg33de1','nsmg33de1','2211,','2211','1234','1234'])) // Output: "results 2", 2

uj5u.com热心网友回复:

你的代码没问题。这个阵列有问题 ['nsmg33de1','nsmg33de1','2211,','2211','1234','1234'] 使用 ['nsmg33de1','nsmg33de1','2211','2211',' 1234','1234']

也试试这个原始代码

const arr = ['nsmg33de1','nsmg33de1','2211','2211','1234','1234']

let obj = {};

arr.forEach(x => {
  obj[x] = (obj[x] || 0)   1;
});

console.log(obj);

let valArray =Object.values(obj);

let conunt = 0;

valArray.forEach( c => {
    if(c > 1){
        conunt = conunt   1;
    }
});

console.log(conunt);

uj5u.com热心网友回复:

你的代码运行得很好。

洗掉,串列中第 3 项末尾的逗号

['nsmg33de1','nsmg33de1','2211,','2211','1234','1234']

结果:

['nsmg33de1','nsmg33de1','2211','2211','1234','1234']

const repeat = nums => { //* Done
    let ans = []
    for (let i = 0; i < nums.length; i  ) {
      if (nums[i] === nums[i 1]) {
         if (ans[ans.length-1] !== nums[i]) {
            ans.push(nums[i])
         }
      } 
    }
    return ans.length 
}

console.log(repeat(['nsmg33de1','nsmg33de1','2211','2211','1234','1234'])) // -> 3

如果单词不按顺序使用以下内容:

const getRepeatedWordsCount = list => {
  let wordDict = {};
  let total = 0;
  
  for (let word of list) {
    total  = wordDict[word] ? 1 : 0;
    wordDict[word] = 1;
  }
  
  return total;
}

console.log(getRepeatedWordsCount(['nsmg33de1','2211','1234','nsmg33de1','1234', '2211'])) // -> 3

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *