依旧周五,但今天不是满课,下午第一节的学术交流顺延了。
空了一段时间出来,刷题:
2道简单,1道中等,
2道简单全是字符串的,也没什么好说的
423. 从英文中重建数字
给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。
int n=s.size();
unordered_map<char,int> c;
for(int i=0;i<n;i++)
{
char ch=s[i];
c[ch]++;
}
vector<int> cnt(10);
//z, w, u, x, g 都只在一个数字中,即 0,2,4,6,8 中出现
cnt[0] = c['z'];
cnt[2] = c['w'];
cnt[4] = c['u'];
cnt[6] = c['x'];
cnt[8] = c['g'];
cnt[3] = c['h'] - cnt[8];//h 只在 3,8 中出现次
cnt[5] = c['f'] - cnt[4];//f 只在 4,5 中出现。
cnt[7] = c['s'] - cnt[6];//s 只在 6,7 中出现
cnt[1] = c['o'] - cnt[0] - cnt[2] - cnt[4];//o 只在 0,1,2,4 中出现
cnt[9] = c['i'] - cnt[5] - cnt[6] - cnt[8];//推荐使用 i 进行计算,因为 n 在 9 中出现了 2 次,e 在 3 中出现了 2 次,容易在计算中遗漏。
string ans;
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < cnt[i]; ++j) {
ans += char(i + '0');
}
}
虽然是中等题,但是难度也不高,大伙都在骂没什么意义,但是看到还是有人碰见了这样子的面试题。
如果是自己写的话,那也是哈希表,找到一个之后,就行--,=0时删除,但是效率应该是挺低的,同样要考虑一下数字会不会重复,所以说他这题目说明每次都很差,就是因为给出的例子又不说明白,就给全是1个数字的,怎么知道重复?
题目的做法不知道是取巧,还是搞密码学,确实速度很快,稍微看看留个印象吧。
到现在的字符串看着好像不是都太难的,上次那个栈那边还有字符串处理,比这些都烦好多呢。
剩点时间也就看看网页的markdown了
晚上还是看数据库,终于是到索引了,能在服务器上写东西了。
-- name字段为姓名字段,该字段的值可能会重复,为该字段创建索引
create index idx_user_name on tb_user(name);
-- phone手机号字段的值非空,且唯一,为该字段创建唯一索引
create unique index idx_user_phone on tb_user (phone);
-- 为profession, age, status创建联合索引
create index idx_user_pro_age_stat on tb_user(profession, age, status);
-- 为email建立合适的索引来提升查询效率
create index idx_user_email on tb_user(email);
-- 删除索引
drop index idx_user_email on tb_user;
image.png








网友评论