给定一个长度为 n 的字符串,找出最多包含两种字符的最长子串 t ,返回这个最长的长度。 数据范围: ,字符串种仅包含小写英文字母
区块链毕设网qklbishe.com为您提供问题的解答
给定一个长度为 n 的字符串,找出最多包含两种字符的最长子串 t ,返回这个最长的长度。
数据范围: ,字符串种仅包含小写英文字母
# -*- coding: utf-8 -*- import sys, collections class Solution: """ 题目: https://www.nowcoder.com/practice/90d6a362fa7d4c519d557da797bb02ce?tpId=196&tqId=40552&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3FjudgeStatus%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=3&tags=&title= 给定一个长度为 n 的字符串,找出最多包含两种字符的最长子串 t ,返回这个最长的长度。 用例1: 输入:nowcoder 输出:2 用例2: 输入:nooooow 输出:6 算法: 这里我们通过双指针i, j:i指向当前字符区间的起点,j指向当前字符区间的终点,如果s[i: j + 1]中包含的字符种类,小于等于2,j右移;否则,i右移,直到区间内的字符种类重新小于等于2。在移动区间的时候,我们使用字典count,统计当前区间内字符出现次数。使用maxLen,更新满足条件的字符串的长度。 复杂度: 时间复杂度:O(n) 空间复杂度:O(1) """ def solve(self, s): n = len(s) i, j, count, maxLen = 0, 0, collections.defaultdict(int), 2 while j < n: count[s[j]] += 1 while len(count) > 2: count[s[i]] -= 1 if count[s[i]] == 0: count.pop(s[i]) i += 1 maxLen = max(maxLen, j - i + 1) j += 1 return maxLen if __name__ == "__main__": sol = Solution() s = sys.stdin.readline().strip() # 输入字符串,去除首尾空格 res = sol.solve(s) print res
50:49
以上就是关于问题给定一个长度为 n 的字符串,找出最多包含两种字符的最长子串 t ,返回这个最长的长度。
数据范围: ,字符串种仅包含小写英文字母的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训