首页 > 其他分享 >字符串排序

字符串排序

时间:2023-10-06 14:56:25浏览次数:40  
标签:String s1 && 字符串 排序 strings

方法1:直接用数组排序

public class StringSort {
    public static void main(String[] args) {
        String[] strings = {"abc123", "abc+1234", "ababab--1"};

        // 对每个字符串计算字母字符个数和数字字符个数,并按照字母数字比和字符串本身大小排序
        Arrays.sort(strings, (s1, s2) -> {
            int alphaCount1 = 0, numericCount1 = 0;
            for (char c : s1.toCharArray()) {
                if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') alphaCount1++;
                else if (c >= '0' && c <= '9') numericCount1++;
            }
            double ratio1 = numericCount1 == 0 ? Double.MAX_VALUE : (double) alphaCount1 / numericCount1;

            int alphaCount2 = 0, numericCount2 = 0;
            for (char c : s2.toCharArray()) {
                if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') alphaCount2++;
                else if (c >= '0' && c <= '9') numericCount2++;
            }
            double ratio2 = numericCount2 == 0 ? Double.MAX_VALUE : (double) alphaCount2 / numericCount2;

            if (ratio1 < ratio2) return 1;
            else if (ratio1 > ratio2) return -1;
            else return s2.compareTo(s1); // 按照降序排列
        });

        // 输出排序后的结果
        System.out.println(Arrays.toString(strings));
    }
}

方法二:用Collections进行排序

标签:String,s1,&&,字符串,排序,strings
From: https://www.cnblogs.com/chenyi502/p/17744572.html

相关文章

  • 归并排序原理、演示及代码
    归并排序1.原理归并排序是一种排序算法,它通过将待排序的数组或列表递归分割成较小的子数组,然后将这些子数组合并以生成一个有序的数组。2.操作分割(Divide):将待排序的数组分成两个大致相等的子数组,或者将列表分成两部分。这个过程是递归的,直到每个子数组或子列表都只包含一个元......
  • 【C语言入门】快速排序函数的应用
    快速排序函数qsortvoidqsort(void*base,typenitems,typesize,int(cmp)(constvoid*p1,constvoid*p2));参数说明:base  指针要排序的数组的首元素指针nitems  数组元素的总个数size  数组中每一个元素的字节大小cmp  函数指针(用来比较两个元素的函数)比......
  • 如何检查一个字符串是否包含子字符串的JavaScript方法?
    内容来自DOChttps://q.houxu6.top/?s=如何检查一个字符串是否包含子字符串的JavaScript方法?通常,我会期望有一个String.contains()方法,但似乎没有这个功能。有什么合理的方式来检查这个吗?ECMAScript6引入了String.prototype.includes:conststring="foo";constsubstri......
  • 为什么处理已排序数组比处理未排序数组更快?
    在这个C++代码中,在计时区域之前对数据进行排序(*)使得主循环快6倍:#include<algorithm>#include<ctime>#include<iostream>intmain(){//生成数据constunsignedarraySize=32768;intdata[arraySize];for(unsignedc=0;c<arraySize;++c)......
  • 每个字符串从'/'到最后的内容都被替换为''
    list_1=['产品类型','后续机台','重量','可生产温度/℃','预计自然冷却时间/h','预计单面风机风机强冷时间/h','预计双面风机风机强冷时间/h']#请使用正则表达式给出pattern使得每个字符串从'/'到最后的内容都被替换为'',最终结果为['产品类型......
  • Leetcode刷题83. 删除排序链表中的重复元素
    给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3] 提示:链表中节点数目在范围 [0,300] 内-100<=Node.val<=100题目数......
  • 基础算法--字符串
    \(KMP\)\(KMP\)算法(Knuth-Morris-Pratt算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂。基本概念\(1\)、s[]是模式串,即比较长的字符串。\(2\)、p[]是模板串,即比较短的字符串。(这样可能不严谨。。。)\(3\)、“非平凡前缀”:指除了最后一个字符以外,一个字符串的全......
  • 快速排序
    快速排序使用java实现快速排序publicstaticvoidquickSort(int[]arr,intl,intr){if(l>=r){return;}intlift=l;intright=r;//选取比较的值,取需要排序的序列的第一个数作为基值intp=ar......
  • 第8章 排序
    一、插入排序基本思想:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列,直到全部记录插入完成直接插入排序时间复杂度:最好O(n):表中元素有序,最坏O(n2):表中元素逆序空间复杂度:O(1)稳定性:稳定,总是插入到相同元素的后面适用性:顺序、链式(从前往后查找指定元素......
  • 【字符串】【哈希】ABC284F ABCBAC 题解
    ABC284F这题的正解是\(Z\)函数。如果\(str=T+T\)的话,若可以找到连续的分别长为\(n\)的两段,且这两段可通过\(1\)次翻转变为相同的字符串,那么便一定有解,否则无解。暴力判断是\(\mathcal{O}(n)\)的,时间复杂度直接上天。可以用哈希\(\mathcal{O}(1)\)地判断出两个......