IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> leetcode13193 -> 正文阅读

[数据结构与算法]leetcode13193

131. 分割回文串

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

回文串 是正着读和反着读都一样的字符串。

 

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
示例 2:

输入:s = "a"
输出:[["a"]]
 

提示:

1 <= s.length <= 16
s 仅由小写英文字母组成

分析

  • 这是一种切割问题,切割问题类似组合问题
  • 主要的难点是寻找切割线,终止条件很容易得到就是:切割线与字符串的长度相等时,切割结束。
  • for循环是切割线的变动,即从start到字符串长度减1(实际上就是遍历字符串的范围),递归的话由于不要求重复就递归i+1即可。
  • 判定回文也很简单,左右指针设定下去问题很容易解决,实在不行就反转,判定是否相等。
  • 添加到path里面就是切割线start到i,start相当于是前一个切割线的后一位数据,i相当于是下一个切割线,所以递归i+1,也是为了将i+1替换成下一个start。

代码

class Solution:
    def partition(self, s: str) -> List[List[str]]:
        res = []
        path = []
        
        def huiwen(s): # 返回值bool,判断是否是回文串
            left,right = 0,len(s)-1
            while left < right:
                if s[left] != s[right]:
                    return False
                left+=1
                right-=1
            return True                

        def backtrack(start):
            if start == len(s):
                res.append(path[:])
                return

            for i in range(start,len(s)):
                if huiwen(s[start:i+1]):
                    path.append(s[start:i+1])
                else:
                    continue
                backtrack(i+1)
                path.pop()

        backtrack(0)
        return res

通过截图

在这里插入图片描述

93. 复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你不能重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。


示例 1:

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]
示例 2:

输入:s = "0000"
输出:["0.0.0.0"]
示例 3:

输入:s = "1111"
输出:["1.1.1.1"]
示例 4:

输入:s = "010010"
输出:["0.10.0.10","0.100.1.0"]
示例 5:

输入:s = "101023"
输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]
 

提示:

0 <= s.length <= 20
s 仅由数字组成

分析

  • 由题意可知,超过12位数绝对无解
  • 该题也是切割问题,但需要判定是否存在前导0,我们只需要看数字的长度只要大于1且第一位不为0即可确定,没有前导0。大于一位数只能说明这是多位数(可能是000),为了避免这种情况发生还需要看第一位是什么。
  • 其他和上一题切割问题一样

代码

class Solution:
    def restoreIpAddresses(self, s: str) -> List[str]:
        res = []
        path = []

        if len(s)>12:
            return res
        def effect(s):
            if s[0] == '0' and len(s)>1: # 第一位为0,但是长度大于1,说明这个数前导0 
                return False
            s = int(s)
            if s < 0 or s > 255:
                return False
            return True

        def backtrack(start):
            if start == len(s):
                if len(path) == 4:
                    res.append(".".join(path))
                return
                
            if len(path) > 4 :
                return

            for i in range(start,len(s)):
                if effect(s[start:i+1]): # 切割有效
                    path.append(s[start:i+1])
                else:
                    continue
                
                backtrack(i+1)
                path.pop()

        backtrack(0)
        return res

通过截图

在这里插入图片描述
如有错误,敬请指正,欢迎交流,谢谢?(・ω・)ノ

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:57:54  更:2022-02-05 21:59:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:32:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码