题解 | #abb#

abb

https://www.nowcoder.com/practice/0a8bbf8b9b5b4280957849ef4f240f07

n = int(input())
s = input()
#回溯
# result = []
# path = []
# def back(s):
    
    
#     if len(path) == 3 and path[0]!=path[1] and path[1] == path[2]:
#         # print(path)
#         result.append(path.copy())
#         return
#     if len(path)>=3:
#         return

#     for i in range(len(s)):
#         if path == [] or path[0] != s[i]:
#             path.append(s[i])
#             back(s[i+1:])
#             path.pop()

# back(s)
# print(len(result))

#数学方法
D = {}
for i in s:
    if i not in D:
        D[i] = 1
    else:
        D[i] += 1

result = 0
for i in range(len(s)):
    D[s[i]] -= 1 #扫描一个,向后走一个,把走过的在字典中减一
    for j in D:
        if j!=s[i]: #确保后面的和第一个是不同的字母
            result += (D[j] * (D[j] -1) ) //2  
print(result)

回溯法过了8/11,效率较低

数学用后缀和的方式进行,全部通过

全部评论

相关推荐

2025-11-07 13:25
华东理工大学 golang
嵌入式的小白:基本一面挂这种 1.要复盘面试 2.面试前要学会准备,看看岗位描述要求的技术,还有对应公司的行业,好好准备,举个例子,汽车好多基本会问到can
0offer互助地
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务