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

给定Java算法能否生成符合Leet规则的treasure全量相似变体?

原代码可行性说明

你找到的这段Java代码的递归生成逻辑完全可以满足生成所有字符替换变体的需求,不需要修改核心生成逻辑,仅需将内置的字符映射表替换为符合Leet规则的a-z、0-9替换规则即可。


适配Leet变体生成的修改后代码

下面的代码已经针对treasure涉及的字符补充了常用的单字符Leet映射,所有替换字符均符合你要求的仅a-z、0-9范围:

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class LeetGenerator {
    // Leet字符映射表,可自行增删替换规则
    static Map<Character, char[]> leetMap = new HashMap<Character, char[]>() {{
        put('a', new char[] {'4'});
        put('b', new char[] {'8'});
        put('c', new char[] {'k'});
        put('e', new char[] {'3'});
        put('g', new char[] {'9', '6'});
        put('i', new char[] {'1', 'l'});
        put('k', new char[] {'c'});
        put('l', new char[] {'1', 'i'});
        put('o', new char[] {'0'});
        put('r', new char[] {'2'});
        put('s', new char[] {'5', 'z'});
        put('t', new char[] {'7'});
        put('u', new char[] {'v', '0'});
        put('v', new char[] {'u'});
        put('z', new char[] {'2', 's'});
        // 无替换规则的字符默认留空即可
        put('d', new char[] {});
        put('f', new char[] {});
        put('h', new char[] {});
        put('j', new char[] {});
        put('m', new char[] {});
        put('n', new char[] {});
        put('p', new char[] {});
        put('q', new char[] {});
        put('w', new char[] {});
        put('x', new char[] {});
        put('y', new char[] {});
    }};

    public static Set<String> generateLeetVariants(String str) {
        Set<String> result = new HashSet<>();
        // 统一转小写避免大写字符匹配不到映射
        str = str.toLowerCase();

        if (str.isEmpty()) {
            result.add("");
            return result;
        }

        char currentChar = str.charAt(0);
        for (String tailVariant : generateLeetVariants(str.substring(1))) {
            // 保留原字符的选项
            result.add(currentChar + tailVariant);
            // 遍历所有替换字符生成变体
            char[] variants = leetMap.get(currentChar);
            if (variants != null) {
                for (char variant : variants) {
                    result.add(variant + tailVariant);
                }
            }
        }
        return result;
    }

    // 运行即可直接输出treasure的所有变体
    public static void main(String[] args) {
        Set<String> variants = generateLeetVariants("Treasure");
        System.out.println("共生成变体数量:" + variants.size());
        for (String variant : variants) {
            System.out.println(variant);
        }
    }
}

使用说明

  • 你可以自行修改leetMap里的映射规则,增减每个字符对应的替换选项即可调整生成的变体范围
  • 按当前映射规则,treasure可生成576种变体,如果你需要更多变体,只需要给对应字符增加更多合法的替换选项即可
  • 直接运行main方法就可以输出所有变体,修改main方法里的输入单词即可生成其他单词的Leet变体

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:00:01