题目描述补充
神奇字符串生成器
给定一个初始字符串 S
和一个整数 n
,请设计一个算法来生成一个长度为 n
的神奇字符串。神奇字符串的生成规则如下:
- 初始字符串
S
至少包含两个字符,且第一个字符一定是'b'
,第二个字符一定是'a'
或'c'
。 - 对于字符串中的每个位置
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'
。
- 如果
- 如果生成的字符串长度小于
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 示例代码
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 示例代码
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 示例代码
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"
码小课:在码小课网站上,你可以找到更多关于算法和数据结构的详细解析和练习,帮助你提升编程技能。