LeetCode1525. 字符串的好分割数目

一. 题目
  1. 题目
    给你一个字符串 s ,一个分割被称为 「好分割」 当它满足:将 s 分割成 2 个字符串 p 和 q ,它们连接起来等于 s 且 p 和 q 中不同字符的数目相同。

    请你返回 s 中好分割的数目。

  2. 示例
    LeetCode1525. 字符串的好分割数目_第1张图片

二. 方法一: 暴力(超时)
  1. 解题思路

  2. 解题代码

    def numSplits(self, s: str) -> int:
        size = len(s)
        count = 0
        for index in range(0, size):
        	# 切片的时间复杂度为: O(n)
            size1 = len(set(s[0: index]))
            size2 = len(set(s[index: size]))
            if size1 == size2:
                count += 1
        return count
    
  3. 分析
    时间复杂度: O(n^2)
    空间复杂度: O(n)

三. 方法二
  1. 解题思路

    1. 用长度为26的列表arr1和arr2来分别存放左右两部分各个字符出现的次数
    2. 遍历整个字符串, 每遍历一个元素就将arr1中当前值的个数+1, arr2中当前个数-1
    3. 当arr1和arr2列表中0出现的次数相等时, 则表明左右两部分元素的种类时相等的
  2. 解题代码

    def numSplits(self, s: str) -> int:
    	# arr1存放左侧的元素个数, arr2存放右侧的元素个数
        arr1 = [0 for _ in range(26)]
        arr2 = [0 for _ in range(26)]
        count = 0
        # 第一次循环, 统计全部元素的个数(也就是将所有元素都划分给右侧的情况)
        for ele in s:
            arr2[ord(ele) - 97] += 1
    	# 第二次循环, 统计arr1和arr2中元素0的个数
    	# 相等的话, 这说明左右两侧元素种类相等
        for ele in s:
            arr2[ord(ele) - 97] -= 1
            arr1[ord(ele) - 97] += 1
            if arr1.count(0) == arr2.count(0):
                count += 1
        return count
    
  3. 分析
    时间复杂度: O(n)
    空间复杂度: O(1)

你可能感兴趣的:(LeetCode,leetcode,列表)