• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Swift]LeetCode467.环绕字符串中唯一的子字符串|UniqueSubstringsinWraparoundString ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10346097.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz", so s will look like this: "...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....".

Now we have another string p. Your job is to find out how many unique non-empty substrings of p are present in s. In particular, your input is the string p and you need to output the number of different non-empty substrings of p in the string s.

Note: p consists of only lowercase English letters and the size of p might be over 10000.

Example 1:

Input: "a"
Output: 1

Explanation: Only the substring "a" of string "a" is in the string s. 

Example 2:

Input: "cac"
Output: 2
Explanation: There are two substrings "a", "c" of string "cac" in the string s. 

Example 3:

Input: "zab"
Output: 6
Explanation: There are six substrings "z", "a", "b", "za", "ab", "zab" of string "zab" in the string s.

把字符串 s 看作是“abcdefghijklmnopqrstuvwxyz”的无限环绕字符串,所以 s 看起来是这样的:"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....". 

现在我们有了另一个字符串 p 。你需要的是找出 s 中有多少个唯一的 p的非空子串,尤其是当你的输入是字符串 p ,你需要输出字符串 s 中 p的不同的非空子串的数目。 

注意: p 仅由小写的英文字母组成,p 的大小可能超过 10000。 

示例 1:

输入: "a"
输出: 1
解释: 字符串 S 中只有一个"a"子字符。 

示例 2:

输入: "cac"
输出: 2
解释: 字符串 S 中的字符串“cac”只有两个子串“a”、“c”。 

示例 3:

输入: "zab"
输出: 6
解释: 在字符串 S 中有六个子串“z”、“a”、“b”、“za”、“ab”、“zab”。

8236ms
 1 class Solution {
 2     func findSubstringInWraproundString(_ p: String) -> Int {
 3         var cnt:[Int] = [Int](repeating:0,count:26)
 4         var res:Int = 0
 5         var len:Int = 0
 6         for i in 0..<p.count
 7         {
 8             var cur:Int = p[i].ascii - 97
 9             if i > 0 && p[i - 1].ascii != (cur + 26 - 1) % 26 + 97
10             {
11                 len = 0
12             }
13             len += 1
14             if len > cnt[cur]
15             {
16                 res += len - cnt[cur]
17                 cnt[cur] = len
18             }
19             
20         }
21         return res
22     }
23 }
24 
25 extension String {        
26     //subscript函数可以检索数组中的值
27     //直接按照索引方式截取指定索引的字符
28     subscript (_ i: Int) -> Character {
29         //读取字符
30         get {return self[index(startIndex, offsetBy: i)]}
31     }
32 }
33 
34 extension Character  
35 {  
36   //属性:ASCII整数值(定义小写为整数值)
37    var ascii: Int {
38         get {
39             let s = String(self).unicodeScalars
40             return Int(s[s.startIndex].value)
41         }
42     }
43 }

Memory Usage: 4194kb

 1 class Solution {
 2     func findSubstringInWraproundString(_ p: String) -> Int {
 3         var count: [Character: Int] = [ : ]
 4         let s = Array("abcdefghijklmnopqrstuvwxyz")
 5         let p = Array(p)
 6         for c in s {
 7             count[c] = 0
 8         }
 9         
10         var maxLen = 0
11         
12         for i in 0 ..< p.count {
13             if i > 0 && (p[i].unicodeScalars.first!.value == p[i - 1].unicodeScalars.first!.value + 1 || p[i - 1].unicodeScalars.first!.value == p[i].unicodeScalars.first!.value + 25) {
14                 maxLen += 1
15             } else {
16                 maxLen = 1
17             }
18             count[p[i]] = max(count[p[i]]!, maxLen)
19         }
20         
21         return count.values.reduce(0, { $0 + $1 })
22     }
23 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode334.递增的三元子序列|IncreasingTripletSubsequence发布时间:2022-07-13
下一篇:
openstackswift节点安装手册2-创建rings发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap