0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【文字列 1】疑似数字

Posted at

今回は paiza の「【文字列 1】疑似数字」の問題に挑戦!


問題概要

◯ 入力

  • 英小文字と数字(0~9)からなる文字列 S が与えられる。

  • 「疑似数字」とは 先頭と末尾が数字である部分文字列 を指す。

  • 1文字の数字も「疑似数字」とみなす。


◯ 出力

以下の順序で行う:

  1. 文字列S の1文字目を始点とする全ての疑似数字(終了位置が近い順)。
  2. 次に2文字目を始点とする疑似数字(同様に終了位置が近い順)。
  3. これを文字列の最後まで繰り返す。



入力例:

81zaaz18

出力例:

8
81
81zaaz1
81zaaz18
1
1zaaz1
1zaaz18
1
18
8






✅ OK例:

const rl = require('readline').createInterface({ input: process.stdin });

const lines = [];
rl.on('line', (input) => lines.push(input));
rl.on('close', () => {
    const S = lines[0]; // 入力文字列

    const result = [];

    // i: 開始位置
    for (let i = 0; i < S.length; i++) {
        if (!isNaN(S[i])) { // 開始文字が数字かどうか
            // j: 終了位置(iから右に伸ばす)
            for (let j = i; j < S.length; j++) {
                if (!isNaN(S[j])) { 
                    // i から j までの部分文字列
                    const substr = S.slice(i, j + 1);
                    result.push(substr);
                }
            }
        }
    }

    // 改行で出力
    console.log(result.join("\n"));
});

  • isNaN(x)x が数字なら false を返すので、 !isNaN(x) が「数字判定」になる。

  • 二重ループ

    • 外側ループ i: 開始位置
    • 内側ループ j: 終了位置
    • ij が数字ならその区間を slice で抜き出すだけ。






🗒️ まとめ

🔹 疑似数字の定義

  • 部分文字列の先頭と末尾が数字。
  • 長さ1の数字もOK。

🔹 実装の基本戦略

  • 開始位置 i を決めるループ
    • S[i] が数字なら探索開始。
  • 終了位置 j を決めるループ
    • S[j] が数字なら「S[i..j]」が疑似数字。
    • slice を使って部分文字列を抽出できる。

🔹 数字判定

  • !isNaN(S[i]) が「数字かどうか」の判定になる。

🔹 出力順序

  • 「開始位置ごとに、終了位置が近い順」で出すのがポイント。
  • そのため、内側ループは i から右に順に伸ばしていけば自然に順序が正しくなる。




僕の失敗談(´;ω;`)と解決法🐈

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?