You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断字符串重排后能否拼接为A个相同子串的代码问题排查

问题说明

需求定义

实现函数满足:重排字符串B的字符,使其可表示为A个相同字符串的拼接结果,其中B为字符串类型,A为整数类型,满足条件返回1,否则返回-1。

测试示例

  • 示例1:B = "aabb"、A = 2,可重排为"abab",由2个"ab"拼接而成,返回1
  • 示例2:输入A = 2、B = "bbaabb",输出1,可重排为"abbabb"
  • 示例3:输入A = 1、B = "bc",输出1,原字符串已符合要求
  • 示例4:输入A = 1、B = "aa",输出1,原字符串已符合要求
  • 示例5:A = 2、B = "aaab",无法重排满足要求,输出-1

错误代码分析

用户提供的错误代码如下:

from itertools import combinations
def solve(A, B):
    if B.count(B[0]) == len(B):
        return 1
    comb = combinations(B, A)
    listOfElems = [''.join(i) for i in list(comb)]
    if len(listOfElems) == len(set(listOfElems)):
        return 1
            
    return -1
A = 2
B = "abab"
solve(A, B)

代码存在的问题:

  1. 核心逻辑完全偏离需求:使用combinations获取所有长度为A的字符组合,和判断能否拆分出A个相同子串的需求无关
  2. 判断条件len(listOfElems) == len(set(listOfElems))逻辑错误:该条件用于判断所有长度为A的组合都不重复,和题目要求没有关联
  3. 边界条件缺失:A=1时任意字符串都符合要求,代码没有处理该场景
  4. 没有覆盖核心判断规则:要满足拆分需求,每个字符的出现次数必须能被A整除,这是该题的核心判断依据,代码完全没有实现该逻辑

正确实现方案

核心思路:

要将字符串重排为A个相同子串的拼接,每个子串包含的字符种类和数量完全相同,因此字符串中每个字符的总出现次数必须能被A整除,只要满足这个条件就一定可以构造出符合要求的字符串。

正确代码:

from collections import Counter

def solve(A, B):
    # A为1时任意字符串都符合要求
    if A == 1:
        return 1
    # 统计每个字符的出现次数
    char_count = Counter(B)
    # 检查所有字符的出现次数都能被A整除
    for cnt in char_count.values():
        if cnt % A != 0:
            return -1
    return 1

测试验证:

  • 输入A=2,B="abab":字符a出现2次、b出现2次,都能被2整除,返回1,符合预期
  • 输入A=2,B="aaab":字符a出现3次,3%2=1≠0,返回-1,符合预期

内容的提问来源于stack exchange,提问作者Maws

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:51:03