zoukankan      html  css  js  c++  java
  • 字符串排序

    题目描述

    编写一个程序,将输入字符串中的字符按如下规则排序(一个测试用例可能包含多组数据,请注意处理)。

    规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

    如,输入: Type 输出: epTy

    规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

    如,输入: BabA 输出: aABb

    规则 3 :非英文字母的其它字符保持原来的位置。

    如,输入: By?e 输出: Be?y

    样例:

    输入:

    A Famous Saying: Much Ado About Nothing(2012/8).

    输出:

    A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8). 

    思路:将字符串转换为字符数组,同时替换字母为-1并保存字母数组,对字母数组采取稳定排序,使用排序后的字母数组依次用来填充字符数组中的-1

    <?
    function transform( $input )
    {
        $len = strlen($input);
        $ret = array();
        $chars = array();
        $rule1 = array();
        for ($i = 0; $i < $len; $i++) {
    
            $number = ord($input[$i]);
            if (($number > 64 and ($number < 91)) or ($number > 96 and ($number < 123))) {
                array_push($ret, -1);
                array_push($chars, $input[$i]);
                array_push($rule1, strtolower( $input[$i] ));
            } else {
                array_push($ret, $input[$i]);
            }
        }
        //对chars数组进行稳定排序
        $rule2 = array_keys($chars);
        array_multisort($rule1, SORT_ASC, $rule2, SORT_ASC, $chars);
    
        $j = 0;
        for ( $i = 0; $i < sizeof( $ret ); $i++ )
        {
            if ( $ret[$i] == -1 )
            {
                $ret[$i] = $chars[$j++];
            }
        }
        return implode( "",$ret );
    }
    
    while ($input = trim(fgets(STDIN)))
    {
        print transform( $input )."
    ";
    }
     
  • 相关阅读:
    UVA 10828
    素数推断算法(高效率)
    POJ1611 The Suspects (并查集)
    Android AES加密算法及事实上现
    C语言中的内存对齐
    OpenCV——老照片效果
    uuid 学习
    OpenCV——PS 滤镜, 浮雕效果
    加密算法之BLOWFISH算法
    OpenCV——照亮边缘
  • 原文地址:https://www.cnblogs.com/cing123/p/9832600.html
Copyright © 2011-2022 走看看