LeetCode[排序] - #242 Valid Anagram

本文介绍了一种使用Java语言快速判断两个字符串是否互为变位词的方法,通过比较排序后的字符数组来实现。同时,文章还提供了冒泡排序和快速排序两种排序算法的实现,以及Arrays.sort()方法的使用。最后,通过一个简单的测试程序验证了解决方案的有效性。

原题链接:#242 Valid Anagram

 

要求:

给定两个字符串s和t,写一个函数,判断t是否是s的变位词。

如果t跟s包含相同字符但排列顺序不同,则称t是s的变位词。

例如:

s = "anagram", t ="nagaram",返回true

s = "rat", t = "car",返回false

注意:可以假定字符串只包含小写字母。

 

难度:容易

 

分析:

解这个问题有两种思路,由于题目限定字符串中只包含小写字母,那么分别计算两个字符串中每个字母出现次数,然后再比较即可。第二种思路是把字符串看作字符数组,将两个字符数组分别排序,所得结果若相同,则说明两个字符串互为变位词。

 

解决方案:

Java - 342ms

    public boolean isAnagram(String s, String t) {
        if(s==null||t==null||s.length()!=t.length()){
            return false;
        }
        char[] array1 = s.toCharArray();
        char[] array2 = t.toCharArray();
        Arrays.sort(array1);
        Arrays.sort(array2);
        return Arrays.equals(array1, array2);
    }

上述解决方案中直接使用了Arrays.sort()方法来为两个数组排序,当然,也可以自己实现排序算法。最常用的冒泡和快排:

 

冒泡排序:

    public void bubbleSort(char[] array) {
        for(int i=0; i<array.length-1; i++){
            for(int j=0; j<array.length-i-1; j++){
                if(array[j]>array[j+1]){
                    char temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }yi
        }
    }

快速排序: 

public void quickSort(char[] array, int low, int high) {
        if(low>=high){
            return;
        }
        char paviot = array[low];
        int l = low+1, h = high;
        while(l<h){
            while(array[h]>=paviot && l<h){
                h--;
            }
            while(array[l]<=paviot && l<h){
                l++;
            }
            if(l<h){
                char tmp = array[l];
                array[l] = array[h];
                array[h] = tmp;
            }
        }
        if(array[low]>array[l]){
            array[low] = array[l];
            array[l] = paviot;
        }
        quickSort(array, low, l-1);
        quickSort(array, l+1, high);
    }

冒泡排序时间复杂度为O(n2),快排为O(nlogn)。八大排序算法一文对各排序算法有比较好的总结,在此不再赘述。事实上,查看Arrays.sort()的实现可知,它所使用的是一个改进的双paviot的快速排序算法。可参见java.util.DualPivotQuicksort

 

简单测试程序

 

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值