917. 仅仅反转字母

917. 仅仅反转字母

给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。

示例 1:

输入:"ab-cd"
输出:"dc-ba"

示例 2:

输入:"a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"

示例 3:

输入:"Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"

提示:

S.length <= 100
33 <= S[i].ASCIIcode <= 122 
S 中不包含 \ or "

代码如下:

class Solution {
    /**
     * @param String $S
     * @return String
     */
    function reverseOnlyLetters($S) {
        $newArr = [];
        $cutString = [];
        // 过滤出对应点的字母和非字母的
        foreach (str_split($S) as $key => $item) {
            if (preg_match('/[a-zA-Z]/',$item, $matchs)) {
                $newArr[] = $item;
            }else {
                // 存储非非字母的位置
                $cutString[$key] = $item;
            }
        }
        // 反转数组
        $reverseArr = array_reverse($newArr);
        // 遍历插入到对应的位置
        foreach ($cutString as $key => $item) {
            array_splice($reverseArr, $key, 0, $item);
        }
        // 转字符串
        return implode('', $reverseArr);
    }
}

本文链接:http://itarvin.com/detail-115.aspx

登录或者注册以便发表评论

登录

注册