Leetcode PHP题解--D10 942. DI String Match

博客围绕 942. DI String Match 题目展开,给出题目链接并进行分析。题目要求根据给定只含特定字符的字符串返回满足条件的数组,当字符为某值时前后数字大小有相应关系。还给出解题思路,即遍历字符串,根据不同字符进行数组元素插入操作,最后给出最终代码。

942. DI String Match

题目链接

942. DI String Match

题目分析

给定一个只含ID的字符串S,返回一个数组。
这个数组满足以下条件:
S[i]I时,A[i]<A[i+1]。既后面的数字比前面的大。
S[i]D时,A[i]>A[i+1]。既前面的数字比后面的大。

思路

循环遍历给定的字符串,
当遇到I时,直接在数组后面塞当前字母的下标。
当遇到D时,在数组的当前下标位置前插入当前下标。

最终代码

<?php
class Solution {
    function diStringMatch($S) {
        $S = str_split($S);
        $n = range(0,count($S));
        $nums = [array_shift($n)];
        $currentPosition = 0;
        foreach($S as $s){
            if($s == 'I'){
                $nums[] = array_shift($n);
            }
            else{
                $left = ($currentPosition>=0 ?array_slice($nums,0,$currentPosition):[]);
                $right = ($currentPosition<count($nums)?array_slice($nums,$currentPosition):[]);
                $middle = [array_pop($n)];
                $nums = array_merge($left,$middle,$right);
            }
            $currentPosition++;
        }
       return $nums;
    }
}
复制代码

个人认为这题不是很好描述。有空会尝试描述清楚这个问题。

若觉得本文章对你有用,欢迎用爱发电资助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值