You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

面试题求解:如何在循环中从单词列表生成指定前缀拼接字符串?

搞定这个逐步拼接字符串的面试题

嘿,这个面试题的逻辑其实挺清晰的,我来帮你拆解清楚,再给你写个能直接跑的PHP代码。首先咱们先把需求掰碎了看:

输入是PHP CODING TECH,要生成的输出是从每个单词取首字母拼接,然后逐步给最早还没完全输出的单词多添一个字符,直到把所有单词都完整拼起来为止。

先理清楚规律

先把输入拆成三个单词:PHPCODINGTECH。咱们对着输出序列捋一遍:

  • 第1次:每个单词取第1个字符 → PCT
  • 第2次:第一个单词还没写完(原长3,现在只取了1个),给它加1个字符 → PH + C + T = PHCT
  • 第3次:第一个单词再加1个字符(写完了)→ PHP + C + T = PHPCT
  • 第4次:第一个单词写完了,轮到第二个单词加字符 → PHP + CO + T = PHPCOT
  • ...就这样,每次只给当前最早没写完的单词加一个字符,直到所有单词都完整输出,就停止。

写个能跑的PHP代码

下面是修正后的代码,我加了注释,你一看就懂:

<?php
// 输入字符串
$input = "PHP CODING TECH";
// 按空格拆成单词数组
$words = explode(' ', $input);

// 初始化每个单词当前要取的字符长度,第一次先取1个字符(对应第一个输出PCT)
$currentLengths = array_map(function($word) {
    return 1;
}, $words);

// 用来存最终的输出序列
$resultList = [];

// 循环直到所有单词都被完整输出
while (true) {
    $currentStr = '';
    $isAllCompleted = true;

    // 构建当前步骤的字符串
    foreach ($words as $index => $word) {
        $wordTotalLength = strlen($word);
        // 取当前单词的前N个字符(N是currentLengths里记录的长度)
        $currentStr .= substr($word, 0, $currentLengths[$index]);
        
        // 检查这个单词是否还没写完,只要有一个没写完,整体就没完成
        if ($currentLengths[$index] < $wordTotalLength) {
            $isAllCompleted = false;
        }
    }

    // 把当前字符串加入结果列表
    $resultList[] = $currentStr;

    // 如果所有单词都写完了,就退出循环
    if ($isAllCompleted) {
        break;
    }

    // 找到第一个没写完的单词,给它的当前长度加1
    foreach ($words as $index => $word) {
        if ($currentLengths[$index] < strlen($word)) {
            $currentLengths[$index]++;
            break;
        }
    }
}

// 打印结果,用换行分隔每个字符串
echo implode(PHP_EOL, $resultList);
?>

运行结果验证

跑这段代码,你会得到和题目要求完全一致的输出:

PCT
PHCT
PHPCT
PHPCOT
PHPCODT
PHPCODIT
PHPCODINT
PHPCODINGT
PHPCODINGTE
PHPCODINGTEC
PHPCODINGTECH

逻辑再梳理一遍

  1. 先用explode把输入拆成单词数组,方便逐个处理。
  2. currentLengths数组用来跟踪每个单词当前已经输出了多少个字符,初始都设为1,对应第一个输出的首字母拼接。
  3. 每次循环先构建当前的拼接字符串,然后检查是否所有单词都已经完整输出。
  4. 如果还没全部完成,就找到第一个没写完的单词,把它的输出长度加1,下一次循环就会多输出一个字符。
  5. 直到所有单词都完整输出,就退出循环,最后把结果打印出来。

这个逻辑扩展性也很强,不管输入多少个单词,都能生成对应的逐步拼接序列。

内容的提问来源于stack exchange,提问作者Akshay Parate

火山引擎 最新活动