C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
枚举范围为 [1, 1000 - k + 1],确保序列长度不超出范围。
对每个起始整数 start,构造连续 k 个整数组成的字符串 seqStr。
比较字符频率:
检查 seqStr 和目标字符串 str 的字符是否完全一致。
使用字符频率统计(哈希表)进行比较,确保两者包含的字符种类和频率完全相同。
返回结果:
如果找到匹配的序列,返回其起始整数 start。
如果遍历结束仍未找到匹配,返回 -1。
function findMinSeq(str, k) {
let result = -1;
for (let start = 1; start <= 1000 - k + 1; start++) {
const seqStr = Array.from({ length: k }, (_, i) => start + i).join('');
if (isSameChars(seqStr, str)) {
result = start;
break;
}
}
return result;
}
function isSameChars(seqStr, shuffledStr) {
if (seqStr.length !== shuffledStr.length) return false;
const charCount = (s) =>
[...s].reduce((acc, c) => (acc[c] = (acc[c] || 0) + 1, acc), {});
const seqCount = charCount(seqStr);
const shufCount = charCount(shuffledStr);
return Object.keys(seqCount).every(
(key) => seqCount[key] === shufCount[key]
);
}
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line) => {
const [shuffledStr, k] = line.split(" ");
console.log(findMinSeq(shuffledStr, Number(k)));
});
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: