问题描述
我正在尝试解决以下挑战:
为您提供一个特殊的字符串 S ,该字符串表示 关系。字符串 S 仅包含两个字符“ ”。您的 任务是找到由以下内容组成的按字典顺序最小的字符串 L 小写拉丁字母(a-z)且跟在 S 中提到的关系。
例如,如果给您 S 为“ S 中。在这里,答案是“ acbd”,是a
b 很明显,如果 S 的长度为 n ,则 L 的长度为 n +1。您必须打印字符串 L 。
输入格式
解决方法
一些观察结果:
- 我们可以用一个额外的“ S ,以便使 S 中的字符数等于输出的预期大小。
- 如果 S 中的第i th 个字符是“
- 与S中的连续“ >>连续组相对应的输出字母组是如果它们是序列“
牢记这些原则,设计算法很简单。如果遇到“>”,您只需搜索一个连续序列中有多少个,并为其生成相反的字母块。对于“
这是JavaScript中的一种实现,您可以在其中输入 S ,并且输出将实时显示:
function minString(s) {
let letters = "abcdefghijklmnopqrstuvwxyz";
let res = "";
s += "<"; // add a stub
for (let i = 0; i < s.length; i++) {
if (s[i] === "<") {
res += letters[i];
} else {
let start = i;
while (s[i] === ">") i++;
for (let j = i; j >= start; j--) {
res += letters[j]; // descending series of letters
}
}
}
return res;
}
// I/O handling
let input = document.querySelector("input");
let output = document.querySelector("div");
const refresh = () => output.textContent = minString(input.value);
input.addEventListener("input",refresh);
refresh();
input { width:100% }
S: <input value="<<>>">
Output:
<div>