题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个由 0 和 1 组成的字符串,找出其中子字符串的最短长度,该子字符串要满足条件:1. 其中恰好有 k 个 1;2. 字典序在相同长度的子字符串中最小;

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考解法
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
class Solution {
public:
string shortestBeautifulSubstring(string s, int k) {
if (ranges::count(s, '1') < k) return "";
string ans = s;
int right = 0;
int one_count = 0;
int n = s.size();
for (int left = 0; left < n; left++) {
while(one_count < k && right < n) {
if (s[right++]=='1') one_count++;
}
if (one_count == k && right <= n) {
//cout << left << " " << right << endl;
string tmp(s.begin()+left, s.begin()+right);
//cout << tmp << endl;
if (tmp.size() < ans.size() || tmp.size() == ans.size() && tmp < ans) {
ans = move(tmp);
}
}
if (s[left]=='1') one_count--;
}
return ans;
}
};