提出 #68247710
ソースコード 拡げる
<?php
/**
* 対応の取れた括弧列 S の対応括弧位置を求める
*
* @param string $s 括弧列(例: "(())()」)
* @return array<int[]> 対応する括弧の位置ペア(1-indexed)。各要素は [l, r]。
*/
function findMatchingParentheses(string $s): array {
$stack = []; // @var int[] スタック(左括弧の位置を記録)
$pairs = []; // @var array<int[]> 結果のペアを格納
$n = strlen($s);
for ($i = 0; $i < $n; $i++) {
if ($s[$i] === '(') {
$stack[] = $i + 1; // 1-indexed
} else {
if (!empty($stack)) {
$left = array_pop($stack); // int
$pairs[] = [$left, $i + 1];
}
}
}
// max(l, r) 昇順でソート
usort($pairs, function(array $a, array $b): int {
return max($a[0], $a[1]) <=> max($b[0], $b[1]);
});
return $pairs;
}
/**
* 入力を読み取り、対応括弧の位置を出力する
*
* @return void
*/
function main(): void {
$input = trim(fgets(STDIN));
$result = findMatchingParentheses($input);
foreach ($result as [$l, $r]) {
echo "$l $r\n";
}
}
main();
提出情報
| 提出日時 | |
|---|---|
| 問題 | B51 - Bracket |
| ユーザ | myoshizumi |
| 言語 | PHP (php 8.2.8) |
| 得点 | 1000 |
| コード長 | 1250 Byte |
| 結果 | AC |
| 実行時間 | 263 ms |
| メモリ | 50884 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 1000 / 1000 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample_01 |
| All | random_01, random_02, random_03, random_04, random_05, random_06, random_07, sample_01 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| random_01 | AC | 15 ms | 20968 KiB |
| random_02 | AC | 15 ms | 21040 KiB |
| random_03 | AC | 16 ms | 20776 KiB |
| random_04 | AC | 25 ms | 22312 KiB |
| random_05 | AC | 133 ms | 35944 KiB |
| random_06 | AC | 263 ms | 50884 KiB |
| random_07 | AC | 263 ms | 50688 KiB |
| sample_01 | AC | 17 ms | 21356 KiB |