力扣刷题记录——459.重复的字符串、461. 汉明距离、476. 数字的补数

news2025/1/11 16:54:57
本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《459.重复的字符串、461. 汉明距离、476. 数字的补数》。

459.重复的字符串

题目描述

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

示例 1:
输入: s = "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。
示例 2:
输入: s = "aba" 输出: false
示例 3:
输入: s = "abcabcabcabc" 输出: true 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)

解题思路

首先判断字符串长度是不是1,是的话直接返回False,否则用set获取字符串中的单一元素,在s中去数,如果数出来的结果一样,那么说明可以由重复的字符串构成。

解题过程

def repeatedSubstringPattern(s):
    if len(s) == 1:
        return False
    s_set = list(set(s))
    target_list = []
    for i in s_set:
        target_list.append(s.count(i))
    if len(set(target_list)) == 1:
        return True
    else:
        return False

忽略了字符串的位置,虽然ab的数量一样,但是位置不一样也不能重复构成字符串。可以尝试用列表元素第一次出现的位置与第二次出现的位置进行切割列表。

def repeatedSubstringPattern(s):
    if len(s) == 1:
        return False
    elif len(set(s)) == 1:
        return True
    s_set = list(set(s))
    for i in range(0,len(s_set)):
        list_a = ['a', 'b', 'c', 'a']

        first_index = s.index(s_set[i])
        try:
            sed_indx = s.index(s_set[i], first_index + 1)
        except ValueError:
            return False
        else:
            step = sed_indx - first_index  #0改成i
            print("第二次出现的索引",sed_indx)
            print("第一次出现的索引",first_index)
            print("步长",step)
            begin = s.find(s_set[i])
            # print("begin",begin)
            while begin+step <= len(s)-1:
                if s[begin] == s[begin+step]:
                    begin += step
                else:
                    return False
    return True

忽略了组合中间还包括第一个元素的情况,头痛!用列表切割判断吧!

def repeatedSubstringPattern(s):
    if len(s) == 1:
        return False
    elif len(set(s)) == 1:
        return True
    s_set = list(set(s))
    for i in range(2,int(len(s)/2)+1):
        target_str = "".join(s[:i])
        s_list= [j for j in s.split(target_str) if j != ""]
        if s_list == []:
            return True
    return False

终于通过了!看看其他大佬的解答,直接震惊我!

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        return True if s in (s + s)[1:-1] else False

如果s不包含重复子串,那么s自己就是一次重复的子串,那么把s + s去头去尾中就一定不包含s自己。

如果s包含重复子串,那么在s + s去头去尾中就一定能找到s自己,这样的做法真的很巧妙!记住了!

461. 汉明距离

题目描述

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x y ,计算并返回它们之间的汉明距离。

示例 1:
输入:x = 1, y = 4 输出:2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。
示例 2:
输入:x = 3, y = 1 输出:1

解题思路

首先要将传入的整数转化为二进制,可以用bin函数,主要要进行切片,然后将两个二进制数字补齐,短的数字要在前面加0补齐,最后判断各位是否相等,不相等的话count需要进行+1,最后返回count的值。

解题代码

def hammingDistance(x: int, y: int):
    x_bin = bin(x)[2:]
    y_bin = bin(y)[2:]
    max_length = max(len(x_bin),len(y_bin))
    min_length = min(len(x_bin),len(y_bin))
    if len(x_bin)>len(y_bin):
        y_list = [i for i in y_bin]
        for i in range(max_length-min_length):
            y_list.insert(0,"0")
            y_bin = "".join(y_list)
    elif len(x_bin)==len(y_bin):
        pass
    else:
        x_list = [i for i in x_bin]
        for i in range(max_length-min_length):
            x_list.insert(0,"0")
            x_bin = "".join(x_list)
    count = 0
    for i in range(0,len(x_bin)):
        if x_bin[i] != y_bin[i]:
            count +=1
    return count

476. 数字的补数

题目描述

对整数的二进制表示取反(0 1 1 0 )后,再转换为十进制表示,可以得到这个整数的补数。
例如,整数 5 的二进制表示是 "101" ,取反后得到 "010" ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。

示例 1:
输入:num = 5 输出:2 解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。
示例 2:
输入:num = 1 输出:0 解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。

解题思路

将整数用bin函数转化为2进制的数,遍历得到的字符串,判断其中的每一个数,得到它的补数,最后用int转化为整数就可以了,返回得到的整数。

解题代码

def findComplement(num: int):
    # 转化为2进制
    num_bin = bin(num)[2:]
    fin_num = ""
    for i in num_bin:
        if i =="0":
            fin_num += "1"
        else:
            fin_num += "0"
    result_num = int(fin_num,2)
    return result_num

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql数据库中的表

创建表 和之前的创建库差不多&#xff0c;需要多指定一个engine&#xff08;不写默认INNODB&#xff09;这个后面说 字符集还有校对规则不指定的话和库的保持一致 案例 图形化创建就不说了&#xff0c;主要就指令 # 演示关于创建表的操作 # 在db02创建表USER包含id-整形 name…

(9)go-micro微服务Redis配置

文章目录一 go-redis介绍二 go-redis安装三 redis初始化连接四 存储mail邮件五 存储token六 最后一 go-redis介绍 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库…

【验证码逆向专栏】某验二代滑块验证码逆向分析

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 本文章未经许可禁止转载…

svn安装与配置并集成

svn安装 客户端安装与下载 下载地址&#xff1a;https://tortoisesvn.net/downloads.zh.html 根据自身设备情况下载 1、更换安装路径&#xff0c;点击next&#xff08;如果安装路径选择不了那么先点击next在点击back就可以选择安装路径了&#xff09; 2、如果需要集成idea在下…

详解“陌生的“位段

目录 一、什么是位段&#xff1f; 二、位段的内存分配 三、位段的应用 一、什么是位段&#xff1f; C 语言允许一个结构体中以位为单位来指定其成员所占内存长度&#xff0c;这种以位为单位的成员称为"位段"或"位域"&#xff08;bit field&#xff09;…

Golang——异常和error

Go 提供了两种处理错误 方式&#xff0c; 一 种是借助 panic和 recover 的抛出捕获机制&#xff0c; 另一种使用error 错误类型 一、异常 1、go没有try/catch&#xff0c;而是使用panic/recover。 panic包出异常&#xff0c;后续代码不再执行 recover再defer中捕获异常&#x…

c++--stack,queue,priority_queue

前言 对于栈和队列我们是不陌生的&#xff0c;在数据结构阶段已经学习过&#xff0c;记得当时我们还是用c语言将它一步一步造出来&#xff0c;因为压栈与出栈正好满足数组的尾插与头删&#xff0c;数组的代价是及小的。对于队列是头出队列&#xff0c;尾插。所以就栈的实现就用…

React 学习笔记总结(七)

针对React拓展相关的学习。 文章目录一. React 项目打包二. React扩展 之 setState两种写法三. React扩展 之 lazyLoad(懒加载)四、React的 stateHook五、React 的 Effect Hook六、React 的 RefHook七、React 的 Fragment八、React 的 Context九、React 的 PureComponent1. Com…

centos配置网卡自动获取ipv4和ipv6地址

环境&#xff1a; os&#xff1a;centos7 1.背景 正常网卡通过dhcp是不会自动获取ipv6地址的&#xff0c;一般手动执行dhclient -6 <网卡名>可以获取。 现在需求是&#xff1a;实现os启动后自动获取到ipv6地址 2.方法 在网卡对应的配置文件/etc/sysconfig/network-sc…

一、初识Node.js

一、初识Node.js 1.什么是Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 的官网地址&#xff1a; https://nodejs.org/zh-cn/ 2.Node.js中JavaScript运行环境 注意&#xff1a; 浏览器是 JavaScript 的前端运行环境。Node.js 是 JavaScript 的…

The VMware Authorization Service is not running 解决办法

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

ARM惹众怒,美国芯片行业也开始抛弃它,跟随中国芯片支持新架构

ARM曾以为它已经垄断了移动芯片市场&#xff0c;因此可以肆意&#xff0c;甚至还传出计划提高芯片架构授权费的消息&#xff0c;去年还计划限制高通等美国芯片企业自研核心架构&#xff0c;此前它已得罪中国芯片&#xff0c;可以说ARM真正惹了众怒&#xff0c;如此情况下这些芯…

开源文档协作套件CryptPad

本文完成于 2022年 9 月&#xff0c;11月的时候补充了些内容&#xff0c;修改了部分图片&#xff0c;原本是准备发的&#xff0c;不知什么原因又给拖延了&#xff1b; 当时的版是 v5.1.0&#xff0c;而现在最新的版本是 v5.2.1 &#xff1b; 什么是 CryptPad &#xff1f; Cryp…

WEB页面执行shell命令

上面是我的微信和QQ群&#xff0c;欢迎新朋友的加入。1.安装apache服务apt-get install apache22.创建shell脚本cd /var/www/cgi-bin/ vim shell#!/bin/sh alias urldecodesed "s g;s%\\\\xg" | xargs -0 printf "%b" echo "Content-Type: text/html;…

springboot通过controller,dao,service,serviceImpl的基类快速实现各个实体类的增删改查分页等操作

1.pom.xml文件: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/PO…

【1】K8s上部署KubeSphere

目录 1、环境初始化 【1】改名字和主机名解析 【2】时间同步 【3】禁用iptables和firewalld服务&#xff08;三台都要设置&#xff09; 【4】禁用selinux&#xff08;三台都要设置&#xff09; 【5】禁用swap分区 【6】修改linux的内核参数 2、安装docker 【1】安装doc…

化学试剂Silane-PEG-Biotin,硅烷聚乙二醇生物素材料说明

英文名称&#xff1a;Biotin-PEG-Silane 中文名称&#xff1a;生物素-聚乙二醇-硅烷 分子量&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c;20k。。。 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff…

RS485 TO ETH (B)无法联网怎么解决?

1 设置下静态IP&#xff0c;例如&#xff1a; RS485 TO ETH (B) 设置为 192.168.1.200 端口号1111&#xff1b; 电脑设置为192.168.1.199 端口号1111&#xff1b; 2 用互联网社区分享的TCP服务器测试下&#xff1a;120.79.100.197 端口号 10002 3 请关闭电脑的所有防火墙&am…

Java 中 List 排序的 3 种方法

在某些特殊的场景下&#xff0c;我们需要在 Java 程序中对 List 集合进行排序操作。比如从第三方接口中获取所有用户的列表&#xff0c;但列表默认是以用户编号从小到大进行排序的&#xff0c;而我们的系统需要按照用户的年龄从大到小进行排序&#xff0c;这个时候&#xff0c;…

1.1.1信号的概念、描述及分类

目录 1.信号的概念 2.描述 3.分类 3.1确定信号和随机信号 ​3.2连续信号和离散信号​​​​​​​ 两者之间存在这样一种关系 3.3周期信号和非周期信号 3.4能量信号和功率信号 一些例题 1.信号的概念 信号是表示消息的 物理量 &#xff0c;如电信号可以通过 幅度 、 …