题目
题目描述
由于上一个版本出现无法过关的情况,特地写了修复版本
国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。
比如一条项链,我们用 AB 来表示,不同的字母表示不同颜色的珍珠。如果把 B 端接触镜面的话,魔镜会把这条项链变为 ABBA 。如果再用一端接触的话,则会变成 ABBAABBA (假定国王只用项链的某一端接触魔镜)。
给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。
输入
只有一个字符串(长度 ≤100≤100),由大写英文字母组成,表示最终的项链。
输出
只有一个整数,表示国王没使用魔镜前,最初的项链可能的最小长度。
代码
代码1
#include <iostream>
#include <string>
#include <algorithm>
int findMinChainLength(const std::string& chain) {
int n = chain.length();
for (int i = 1; i <= n; i++) {
std::string candidate = chain.substr(0, i);
std::string reversedCandidate = candidate;
std::reverse(reversedCandidate.begin(), reversedCandidate.end());
if (chain.find(candidate + reversedCandidate) == 0) {
return i;
}
}
return n;
}
int main() {
std::string chain;
std::cin >> chain;
int minChainLength = findMinChainLength(chain);
std::cout << minChainLength << std::endl;
return 0;
}
这个程序用于求解国王使用魔镜之前,最初的项链可能的最小长度。它会从输入中读取最终的项链,然后计算并输出最小长度。你只需要将最终的项链输入程序中,然后查看输出的最小长度即可。希望这个程序能够帮助你!
代码2
#include <iostream>
#include <string>
int findMinChainLength(const std::string& chain) {
int n = chain.length();
for (int i = 1; i <= n; i++) {
std::string candidate = chain.substr(0, i);
std::string reversedCandidate = candidate;
std::reverse(reversedCandidate.begin(), reversedCandidate.end());
if (chain.find(candidate + reversedCandidate) == 0) {
return i;
}
}
return n;
}
int main() {
std::string chain;
std::cin >> chain;
int minChainLength = findMinChainLength(chain);
std::cout << minChainLength << std::endl;
return 0;
}
这个程序用于求解国王使用魔镜之前,最初的项链可能的最小长度。它会从输入中读取最终的项链,然后计算并输出最小长度。你只需要将最终的项链输入程序中,然后查看输出的最小长度即可。希望这个程序能够帮助你!