当前位置: 面试刷题>> 神奇字符串 (经典算法题500道)


### 题目描述补充 **神奇字符串生成器** 给定一个初始字符串 `S` 和一个整数 `n`,请设计一个算法来生成一个长度为 `n` 的神奇字符串。神奇字符串的生成规则如下: 1. 初始字符串 `S` 至少包含两个字符,且第一个字符一定是 `'b'`,第二个字符一定是 `'a'` 或 `'c'`。 2. 对于字符串中的每个位置 `i`(从第三个字符开始,即 `i >= 2`),字符 `S[i]` 的值基于 `S[i-1]` 和 `S[i-2]`: - 如果 `S[i-1]` 是 `'a'` 且 `S[i-2]` 是 `'b'`,则 `S[i]` 为 `'c'`。 - 如果 `S[i-1]` 是 `'b'` 且 `S[i-2]` 是 `'a'`,则 `S[i]` 为 `'a'`。 - 如果 `S[i-1]` 是 `'c'` 或 `S[i-2]` 是 `'c'`,则 `S[i]` 为 `'b'`。 3. 如果生成的字符串长度小于 `n`,继续根据上述规则生成字符直到字符串长度为 `n`。 **示例**: - 初始字符串 `S = "ba"`,`n = 7`,则生成的神奇字符串为 `"bacabbc"`。 - 初始:`"ba"` - 规则应用:`'a'` 后 `'b'` 得 `'c'` -> `"bac"` - 规则应用:`'c'` 后 `'a'` 得 `'b'` -> `"bacb"` - 规则应用:`'b'` 后 `'c'` 得 `'a'` -> `"bacba"` - 规则应用:`'a'` 后 `'b'` 得 `'c'` -> `"bacbac"` - 规则应用:`'c'` 后 `'a'` 得 `'b'` -> `"bacbacb"` - 此时长度已等于 `n`,所以停止生成。 ### PHP 示例代码 ```php function generateMagicString($S, $n) { $magicString = $S; while (strlen($magicString) < $n) { $lastChar = $magicString[strlen($magicString) - 1]; $secondLastChar = $magicString[strlen($magicString) - 2]; if ($lastChar == 'a' && $secondLastChar == 'b') { $magicString .= 'c'; } elseif ($lastChar == 'b' && $secondLastChar == 'a') { $magicString .= 'a'; } else { $magicString .= 'b'; } } return substr($magicString, 0, $n); } // 示例 $initialString = "ba"; $n = 7; echo generateMagicString($initialString, $n); // 输出 "bacabbc" ``` ### Python 示例代码 ```python def generate_magic_string(S, n): magic_string = S while len(magic_string) < n: last_char = magic_string[-1] second_last_char = magic_string[-2] if last_char == 'a' and second_last_char == 'b': magic_string += 'c' elif last_char == 'b' and second_last_char == 'a': magic_string += 'a' else: magic_string += 'b' return magic_string[:n] # 示例 initial_string = "ba" n = 7 print(generate_magic_string(initial_string, n)) # 输出 "bacabbc" ``` ### JavaScript 示例代码 ```javascript function generateMagicString(S, n) { let magicString = S; while (magicString.length < n) { const lastChar = magicString[magicString.length - 1]; const secondLastChar = magicString[magicString.length - 2]; if (lastChar === 'a' && secondLastChar === 'b') { magicString += 'c'; } else if (lastChar === 'b' && secondLastChar === 'a') { magicString += 'a'; } else { magicString += 'b'; } } return magicString.slice(0, n); } // 示例 const initialString = "ba"; const n = 7; console.log(generateMagicString(initialString, n)); // 输出 "bacabbc" ``` **码小课**:在码小课网站上,你可以找到更多关于算法和数据结构的详细解析和练习,帮助你提升编程技能。
推荐面试题