力扣周赛碎碎念

感受

第一次参加周赛,规则是AC才给分,错误提交会罚时,一次5min。
没搞清楚,第二题写了个大概就交了,错了三次才AC。
第一次AC 2题,第三题超时,查不出来(T.T)

第一题签到题性质,不说了

第二题

求回文串的第一个全排列
给个回文字符串s,求它的字典序最小的回文串

第一遍思路:

  • 直接排序,然后next_permutation(),然后判断是否是回文串,是就输出

    喜提超时

第二遍思路:

  • 统计了下各个字母出现的次数,写到数组里,然后从小到大遍历数组,不为1直接写到ans字符串里,然后left++,right–,最后到中间那个,相等的话写剩下一个就行。
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
class Solution {
public:
string smallestPalindrome(string s) {
long long n = s.size();
string ans;
ans.resize(n);
long long cr[28];
for(auto c:s)
cr[c-'a']++;
long long left = 0,right = n-1;
while(left<= right)
{
int i = 0;
while(cr[i]==0&&i<26)
i++;
if(cr[i] == 1 && left!=right)
{
i++;
while(cr[i]==0&&i<26)
i++;
}
ans[left] = i+'a';
ans[right] = i+'a';
cr[i]-=2;
left++;right--;
}
return ans;
}
};

笨笨的做法。没注意条件,给的就是个回文串。
其实直接把给的除2写到ans里,再给ans排个序,中间字符单独处理下,最后输出ans+mid+ans.reverse()就好了。。

第三题

上题的加强版,让求第k个回文串
本来按照上题第2种做法做的,爆解第k个,喜提超时。。(O…O)
然后按照改进思路做的,原字符串砍一半写到temp里,中间单独拎出来,temp排序,然后next_permutation() 走k-1次。如果没next直接输出空字符串就完了。

还是喜提超时 (TwT)
太难了呜呜呜


力扣周赛碎碎念
http://blog.jiuge.host/post/20250413140100.html
作者
Pigeon.🕊
发布于
2025年4月13日
许可协议
CC BY-NC-SA 3.0