提出 #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
結果
AC × 1
AC × 8
セット名 テストケース
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