当前位置: 首页 > article >正文

3138. 同位字符串连接的最小长度

在这里插入图片描述
思路

记住一个点即可:由同位字符串组成的字符串,它们排序后是相同的
1.用dict1来记录可能成为同位符的字符串个数以及同位符的使用次数:
从len(s)-1开始遍历,若 len(s)%i == 0:说明组成同位符字符串长度有可能是i,则记录此长度及对应的使用次数(即 len(s)// i )
2.接着根据可能存在的同位符,依次去遍历字符串s:
在遍历过程中如果遇到排序后字符串不相同的情况,说明此此字符串不是同位符,则进行下一个同位符的遍历。
若遍历s后,同位符出现次数==dict1对应同位符次数,则说明此同位符是可以构成字符串的。
若存在多个同位符的情况,则选取字符串长度最小的

时间复杂度: O(n^2)

代码

class Solution:
    def minAnagramLength(self, s: str) -> int:
        t=set(s)
        #同位字符是本身
        if len(s)==len(t):
            return len(s)
        #同位符是一个字符
        if s.count(s[0])==len(s):
            return 1
        #记录可能存在的同位符(位数)及使用同位符次数
        dict1={}
        c=0
        for i in range(len(s)-1,1,-1):
            if len(s)%i==0:
                dict1[i]=len(s)//i
        for i in dict1.keys():
            t=1
            s1=''.join(sorted(s[0:i]))
            for j in range(i,len(s),i):
                if s1==''.join(sorted(s[j:j+i])):
                    t+=1
                else:
                    #只要不等说明此时的字符不是同位符
                    break
            if t==dict1[i]:
                #找到第一个有可能的同位符
                if c==0:
                    c=i
                else:
                    #多个同位符找最小
                    c=min(c,i)
        if c==0:
            #遍历可能的同位符后都不是,则说明自身是同位符
            return len(s)
        else:
            return c

http://www.kler.cn/a/445290.html

相关文章:

  • 面试题整理4----lvs,nginx,haproxy区别和使用场景
  • 数据分析实战—鸢尾花数据分类
  • 电子应用设计方案-63:智能升降茶几系统方案设计
  • 【进程篇】操作系统
  • 【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器
  • C++版实用时间戳类(Timestamp)
  • 红队/白帽必经之路(23)——如何通过如何使用脚本以及Metasploit来进行自动创建后门以及如何做到红方真正的销声匿迹 [既然是红队,那就对自己狠一点]
  • 面试题整理4----lvs,nginx,haproxy区别和使用场景
  • 【iOS安全】NSTaggedPointerString和__NSCFString
  • v-model(Vue3)
  • RK3588平台上YOLOv8模型转换与CentOS 7.8 Docker镜像拉取超时问题解决指南
  • TDengine 新功能 从 CSV 批量创建子表
  • Ubuntu22.04上安装esp-idf
  • Scalable Io-NIO实践
  • 使用 DeepSpeed 微调 OPT 基础语言模型
  • 【新版】阿里云ACP大数据工程师模拟试题(含答案解析)
  • wepack的各个版本差异?
  • 生产环境kafka升级过程
  • RadiAnt DICOM - 基本主题 :从 PACS 服务器打开研究
  • 彻底理解如何优化接口性能
  • 【Python】Selenium模拟滚动鼠标,向下拖动下拉按钮,直至网页页面向下滑的方法
  • vue3+vite 引入动画组件库 Inspira UI
  • Python机器学习算法KNN、MLP、NB、LR助力油气钻井大数据提速参数优选及模型构建研究...
  • flask-admin+Flask-WTF 实现实现增删改查
  • HTMLCSS:酷炫的3D开关控件
  • 设计模式详解(十一):模板方法——Template Method