zoukankan      html  css  js  c++  java
  • 1370. 上升下降字符串『简单』

    题目来源于力扣(LeetCode

    一、题目

    1370. 上升下降字符串

    题目相关标签:排序、字符串

    说明:

    • 1 <= s.length <= 500
    • s 只包含小写英文字母。

    二、解题思路

    1. 创建 26 个长度的 int 数组,用于映射 26 个小写字母出现的次数

    2. 遍历字符数组 arr(由字符串 s 转换而来),通过哈希数组记录下每个字符出现的次数

    3. 据题意:当哈希数组中次数的和大于 0 时,循环进行字符的添加

      循环操作的步骤:

      1. 正序遍历一次,每次遍历时,往结果集数组中添加元素,并对哈希数组中的次数减 1

      2. 倒序遍历一次,每次遍历时,往结果集数组中添加元素,并对哈希数组中的次数减 1

    4. 哈希数组中的元素都为 0 时,或者记录字符串长度的变量 len 小于等于 0 时,结束循环

    三、代码实现

    public static String sortString(String s) {
        char[] arr = s.toCharArray();
        int len = arr.length;
        // 使用字符数组存储来代替 StringBuilder
        char[] ans = new char[len];
    
        int[] map = new int[26];
        // 将字母字符出现的次数映射到哈希数组中,索引表示字母,值表示出现次数
        for (int i = 0; i < len; i++) {
            map[arr[i] - 'a'] += 1;
        }
        // 记录字符数组 ans 的索引
        int j = 0;
        // 遍历字符串直到记录的长度为 0,即 map 中的值均为 0 时
        // 即实现不停上升和下降的排列,直到长度为 0
        while (len > 0) {
            // 正序遍历:上升
            for (int i = 0; i < map.length; i++) {
                if (map[i] > 0) {
                    ans[j++] = (char) (i + 'a');
                    map[i] -= 1;
                    len -= 1;
                }
            }
            // 倒序遍历:下降
            for (int i = map.length - 1; i >= 0; i--) {
                if (map[i] > 0) {
                    ans[j++] = (char) (i + 'a');
                    map[i] -= 1;
                    len -= 1;
                }
            }
        }
        // 返回字符串结果
        return String.valueOf(ans);
    }
    

    四、执行用时

    五、部分测试用例

    public static void main(String[] args) {
        String s = "aaaabbbbcccc";  // output:"abccbaabccba"
    //    String s = "rat";  // output:"art"
    //    String s = "leetcode";  // output:"cdelotee"
    //    String s = "ggggggg";  // output:"ggggggg"
    //    String s = "spo";  // output:"ops"
        
        String result = sortString(s);
        System.out.println(result);
    }
    
  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12984080.html
Copyright © 2011-2022 走看看