zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【算法】【字符串模块】判断两个字符串是否是变形词

算法模块 字符串 判断 两个 是否是 变形
2023-09-11 14:14:53 时间

前言

当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~

在此感谢左大神让我对算法有了新的感悟认识!

问题介绍

原问题
给定两个字符串str1和str2,如果str1中出现的字符char的种类和个数与str2一模一样,则str1和str2互为变形词
如:str1 = “123” str2 = “231”
结果为true

解决方案

原问题
1、统计str1所有词出现的频率,使用数组表达,其中index
2、再次统计str2中所有词出现的频率,注意,实在str1的统计结果上进行减少操作,每一次判断减少后是否小于0,如果小于0则返回false即可

代码编写

java语言版本

原问题:
经典递归版本:

    /**
     * 二轮测试
     * @param str
     * @return
     */
    public static int getSumCp1(String str){
        if (str == null || str.length() == 0) {
            return 0;
        }
        char[] chars = str.toCharArray();
        int res = 0;
        int cur = 0;
        // true为正数
        boolean pos = true;
        for (int i = 0; i < chars.length; ) {
            if (i < chars.length && chars[i] != '-' && (chars[i] - '0' < 0 || chars[i] - '0' > 9)) {
                // 不是‘-’并且也不是数字的直接略过
                i++;
                continue;
            }
            // 定符号
            while (i < chars.length && chars[i] == '-') {
                pos = !pos;
                i++;
            }
            // 到这里只取数字
            while (i < chars.length && chars[i] - '0' > 0 && chars[i] - '0' < 9) {
                cur = cur * 10 + (chars[i] - '0');
                i++;
            }
            res += pos ? cur : -cur;
            // 复位
            cur = 0;
            pos = true;
        }
        return res;
    }

c语言版本

正在学习中

c++语言版本

正在学习中

思考感悟

这道题很简单,主要有意思的其实是实现方式,str2的遍历使用str1的统计结果减的过程其实在实际业务上面真的可以更快,并且很巧妙,后续可以借鉴一下。

写在最后

方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!