题目要求对一个字符串进行特殊排序,该字符串只包含三种字符类型:字母(大小写)、数字和问号。排序规则如下:
- 问号的原始位置必须保持不变:问号在字符串中的位置不能改变。
- 数字的原始位置必须保持不变,但数字要按照从大到小排序:数字在字符串中的位置不能改变,但所有数字需要按照从大到小的顺序重新排列。
- 字母的原始位置必须保持不变,但字母要按照字典序从小到大排序:字母在字符串中的位置不能改变,但所有字母需要按照字典序从小到大的顺序重新排列。
示例
样例1:
输入:**inp = "12A?zc"**
输出:**'21A?cz'**
样例2:
输入:**inp = "1Ad?z?t24"**
输出:**'4Ad?t?z21'**
样例3:
输入:**inp = "???123??zxy?"**
输出:**'???321??xyz?'**
def solution(inp):
# Edit your code here
num = []
chars = []
res = []
for c in inp:
if "0" <= c <= "9":
res.append('n')
num.append(int(c))
elif c == "?":
res.append("?")
else:
res.append("c")
chars.append(ord(c))
num.sort(reverse=True)
chars.sort()
j, k = 0, 0
for i in range(len(res)):
if res[i] == "n":
res[i] = str(num[j])
j += 1
elif res[i] == "c":
res[i] = chr(chars[k])
k += 1
# print("".join(res))
return "".join(res)
if __name__ == "__main__":
# Add your test cases here
print(solution("12A?zc") == "21A?cz")
print(solution("1Ad?z?t24") == "4Ad?t?z21")
print(solution("???123??zxy?") == "???321??xyz?")
找出最长神奇数列
题目要求在一个由 **0** 和 **1** 组成的正整数序列中,找到最长的「神奇数列」。「神奇数列」的定义是:序列中的 **1** 和 **0** 交替出现,且至少由 3 个连续的 **0** 和 **1** 组成的部分数列。如果有多个神奇数列,那么输出最先出现的一个。
例如:
- 输入:
**inp = "0101011101"** - 输出:
**'010101'**
解释:在这个序列中,最长的神奇数列是 **010101**,因为它由 **0** 和 **1** 交替出现,且长度为 6,大于 3。
def solution(inp):
# Edit your code here
i = 0
temp = int(inp[i])
const = 0
res = 0
for j in range(len(inp)):
if int(inp[j]) == temp:
const += 1
temp = 1 - temp
if const > res:
# print(const)
res = const
# print(res)
i = j - const + 1
# print(i)
else:
const = 1
temp = 1 - int(inp[j])
# print(inp[i:i+res])
if res < 3:
return ""
return inp[i:i+res]
if __name__ == "__main__":
# Add your test cases here
print(solution("0101011101") == "010101")
为什么需要Redis
- 数据从单表,演进出了分库分表
- mysql 从单机演进出了集群
- 数据量增长
- 数据读写压力不断增加
- 数据分冷热
- 热数据:经常被访问到的数据
- 将热数据存储到内存中
Redis基本工作原理
- 数据从内存中读写
- 数据保存到硬盘上防止重启数据丢失
- 增量数据保存到AOF文件
- 全量数据RDB文件
- 单线程处理所有操作命令
- setnx 并不能完全保证高可用分布式锁实现