leetcode 828. 独特字符串
source link: https://iamxcb.com/leetcode-828.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
leetcode 828. 独特字符串
如果一个字符在字符串 S 中有且仅有出现一次,那么我们称其为独特字符。
例如,在字符串 S = “LETTER” 中,”L” 和 “R” 可以被称为独特字符。
我们再定义 UNIQ(S) 作为字符串 S 中独特字符的个数。
那么,在 S = “LETTER” 中, UNIQ(“LETTER”) = 2。
对于给定字符串 S,计算其所有非空子串的独特字符的个数(即 UNIQ(substring))之和。
如果在 S 的不同位置上出现两个甚至多个相同的子串,那么我们认为这些子串是不同的。
考虑到答案可能会非常大,规定返回格式为:结果 mod 10 ^ 9 + 7。
示例 1:
输入: “ABC”
输出: 10
解释: 所有可能的子串为:”A”,”B”,”C”,”AB”,”BC” 和 “ABC”。
其中,每一个子串都由独特字符构成。
所以其长度总和为:1 + 1 + 1 + 2 + 2 + 3 = 10
示例 2:
输入: “ABA”
输出: 8
解释: 除了子串 UNIQ(‘ABA’) = 1,其余与示例1相同。
说明: 0 <= S.length <= 10000。
首先子串的独特字符的个数和即 sum(UNIQ(substring))
,可以转化为求解包含 S[i]
的子串中,S[i]
为独特字符的和即 sum(UNIQ(S[i]))
;
同时包含 S[i]
的子串中,可能会存在 S[i]
永远不会为独特字符的子串;
当 j < i && S[j] == S[i]
时,以 S[j]
开始的子串会使 S[i]
永远成不了独特字符;
当 k > i && S[k] == S[i]
时,以 S[k]
结尾的子串会使 S[i]
永远成不了独特字符;
所以可以去除这两种情况,在 S[j+1:k]
之间统计 UNIQ(S[i])
;
最终问题就变成了计算在 S[j+1:k]
之间,包含 S[i]
的子串有多少种可能,因为每个子串中 S[i]
都会是独特字符;
在 S[j+1:k]
之间,包含 S[i]
的子串的数量其实就等于 (i - j) * (k - i)
;S[j+1:i+1], S[j+1:i+2], ..., S[j+1:k]
,S[j+2:i+1], S[j+2:i+2], ...., S[j+1:k]
,….,S[i:i+1], S[i:i+2], ...., S[i:k]
示例代码(go)
func uniqueLetterString(S string) int {
res, n := 0, len(S)
for i := 0; i < n; i++ {
j, k := 0, 0
for j = i-1; j >= 0; j-- {
if S[j] == S[i] {
break
}
}
for k = i+1; k < n; k++ {
if S[k] == S[i] {
break
}
}
res += (i - j) * (k - i)
}
return res
}
Recommend
-
30
题目: 给定一个字符串 s ,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 思路: 看到这道题目,首先想到回文字符串,是一个沿正中字...
-
8
leetcode 87. 扰乱字符串 发表于 2019-07-15 ...
-
8
LeetCode面试系列 第9天:No.345 – 反转字符串中的元音字母-geekzl上一篇 LeetCode 面试题中,我们分析了一道相对轻松的字符串面试题 - 最后一个单词的长度。今天,我们接着来看另一道字符串的算法题吧。 今天要给大家分析的面试题是...
-
4
LeetCode 第 344 号问题:反转字符串-程序员小吴 当前位置:程序员小吴 > LeetCodeAnimation > LeetCode 第 344 号问题:反转字符串 ...
-
4
Confluent climbs 25% after raising $828 million in IPOKey PointsIn this articleConfluent at the Nasdaq site for their IPO June 25, 2021.Source: Nasdaq
-
5
Lab 1: Booting a PC Part 1: PC Bootstrap The PC's Physical Address Space
-
8
MIT6.828 Lab 1: C, Assembly, Tools, and Bootstrapping 实现机器为VMWare的虚拟机,操作系统为 Debian-11(无桌面版本),...
-
3
Lab 3: User Environments 在这个lab中我们需要创建一个用户环境(UNIX中的进程,它们的接口和实现不同),加载一个程序并运行,并使内核能够处理一些常用的中断请求。
-
3
老板们,828大促来啦!这些爆品等你来盘!阿里巴巴全球速卖通品牌出海,首选平台!AliExpress速卖通828大促正在火热招商中!作为下半年第一场大促,为了给商家朋友们带来更多订单,我们将会在阶梯...
-
1
打响828,华为云拼了 黄昱 发表于 2023年08月28日 13:03 摘要:华为...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK