942. DI String Match
题目链接
题目分析
给定一个只含I
和D
的字符串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;
}
}
个人认为这题不是很好描述。有空会尝试描述清楚这个问题。
若觉得本文章对你有用,欢迎用爱发电资助。