孜然爱爱 发表于 2022-5-16 21:02:26

字符串分割问题

题目描述:
给定非空字符在s,将该字符串分割成一些子串,使每个子串的ASCIIA码值的和均为水仙花数。
1、若分割不成功则返回 0
2、若分割成功且分割结果不唯一则返回-1
3、若分割成功且分割结果唯一,则返回分割后的子串数目
输入描述: 1、输入字符串的最大长度为 200
输出描述:根据题目描述中情况返回相应的结果
备注:“水仙花数”是指一个三位数,每位上数字的立方和等于该数字本身,如 371是“水仙花数”,因为:371=3^3+7^3+1^3。
示例:
输入
abc
输出
0
我写的代码如下,找了一个符合题目的可将字符串分割为两端,字母的ASCII码之和为水仙花数字,但是输出显示的是0。
上了一天班头晕脑胀的,不想再继续想了,所以想请教一下兄弟们:
1. 我的代码哪里出了问题?为什么不能正确输出“1”?
2. 如何判定结果是否唯一,然后返回相应数字?
def Str_sli(str):

    def Nar_Num(num):
      Ge = num % 10
      Shi = num // 10 % 10
      Bai = num % 100
      if num == Ge ** 3 + Shi ** 3 + Bai ** 3:
            return True
      else:
            return False

    length = len(str)
    j = 0
    str_num = 0
    for i in range(length):
      str_num += ord(str)
      if Nar_Num(str_num):
            str = str[(i+1):]
            i = 0
            j += 1
      else:
            i += 1
    if str == '':
      print(j)
    else:
      print(0)
if __name__ == '__main__':
    Str_sli('LMkdce')

Twilight6 发表于 2022-5-16 21:40:46


你 Bai 位的数算错了,应该是 num // 100,另外题目中写的是 "子串" 不是指单个字符

应该要获取子串进行计算 ASCII 值之和,而不是你代码中循环单个字符进行计算 ASCII 后直接判断水仙花数

这里用两个 for 循环嵌套 滑动窗口法 遍历子串,参考代码:

def Str_sli(str):

    def Nar_Num(num):
      Ge = num % 10
      Shi = num // 10 % 10
      Bai = num // 100

      if num == Ge ** 3 + Shi ** 3 + Bai ** 3:
            return True
      else:
            return False

    length = len(str)
    for l in range(0, length):
      for r in range(l + 1, length + 1):
            str_ascii = 0
            for i in str:
                str_ascii += ord(i)
            if Nar_Num(str_ascii):
                print(str)


if __name__ == '__main__':
    Str_sli('!(((')
页: [1]
查看完整版本: 字符串分割问题