You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验用户拼写单词的字母使用次数不超过指定9字母数组的出现次数

9字母网格单词拼写校验逻辑实现方案

核心校验逻辑分为3步

1. 预计算给定字母的频率统计

  • 先把字母数组所有元素统一转为小写(或大写,保证全局统一即可),用哈希表/Map统计每个字母的出现次数,示例中给定数组的统计结果为:a:1、p:1、l:2、e:1、c:1、n:1、t:1、w:1
  • 该统计只需在字母数组生成时计算一次,不需要每次校验都重复计算

2. 预处理用户输入的单词

  • 把用户输入的单词统一转为和前面相同的大小写,同时过滤掉空格、标点等非字母字符,比如输入Apple!会被处理为apple

3. 规则匹配校验

  • 首先判断处理后的单词长度是否超过9,超过直接判定为不符合(总共只有9个字母,每个最多用一次,最长单词只能是9个字母)
  • 统计用户单词中每个字母的出现次数,和预存的字母频率做对比:如果任意一个字母的使用次数超过给定数组中的该字母数量,直接判定为不符合;所有字母的次数都满足要求则符合规则

示例中的单词apple统计出p的出现次数为2,大于给定数组中p的数量1,因此判定不符合


可扩展补充:合法单词校验

如果要求拼写的必须是真实存在的英文单词,可以提前加载本地英文词典数据集(比如存为Set结构),完成上述规则校验后,再判断单词是否存在于词典集合中即可。


参考实现代码(JavaScript)

// 生成给定字母的频率统计,仅需初始化执行一次
const calcLetterCount = (letterArr) => {
  return letterArr.reduce((countMap, item) => {
    const lowerItem = item.toLowerCase();
    countMap[lowerItem] = (countMap[lowerItem] || 0) + 1;
    return countMap;
  }, {});
};

// 初始化:给定的9字母数组
const gridLetters = ["A", "P", "L", "E", "C", "N", "T", "L", "W"];
const gridLetterCount = calcLetterCount(gridLetters);
// 可选:预加载的合法英文单词集合,仅需初始化执行一次
// const validWordSet = new Set(/* 加载本地词典数组 */);

// 校验函数,每次用户提交单词时调用
const checkWordValid = (inputWord) => {
  // 清洗用户输入
  const cleanWord = inputWord.toLowerCase().replace(/[^a-z]/g, '');
  // 长度校验
  if (cleanWord.length > gridLetters.length) return false;
  // 统计输入单词的字母频率
  const wordLetterCount = calcLetterCount(cleanWord.split(''));
  // 频率匹配校验
  for (const [letter, count] of Object.entries(wordLetterCount)) {
    if (!gridLetterCount[letter] || count > gridLetterCount[letter]) {
      return false;
    }
  }
  // 可选:合法单词校验
  // if (!validWordSet.has(cleanWord)) return false;
  return true;
};

// 测试示例
console.log(checkWordValid("apple")); // 输出 false
console.log(checkWordValid("plate")); // 输出 true

内容的提问来源于stack exchange,提问作者Nasian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 21:36:09