java数据结构与算法刷题-----LeetCode5:最长回文子串

【力扣:Leetcode题解系列之0005. Longest Palindromic Substring:最长回文子串解题全析】 本文全面解析了力扣第5题"最长回文子串"的三种解法:暴力遍历(O(n³))、动态规划(O(n²))和马拉车算法(O(n))。通过Python、Java、C++等语言实现,详细分析了各方法的时间空间复杂度。暴力法简单直接但效率低;动态规划利用子问题优化;马拉车算法则在线性时间内解决问题。文章还提供了代码示例,帮助理解不同解法的优劣,为处理类似回文问题提供了清晰的解题思路。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

解题思路
  1. 处理回文串有2种经典算法,一种是中心扩展法,另一种是Manacher 算法
  1. 中心扩展法,逻辑相对简单一些,时间复杂度O(n^2), 而不需要额外空间复杂度O(1)
  2. Manacher 算法是线性时间处理回文串的算法,但需要额外的空间。时间复杂度O(n),空间复杂度O(n)
  1. 当然还有另类的算法,那就是强行使用动态规划。时间复杂度和空间复杂度都是O(n^2)
代码

在这里插入图片描述

  1. Manacher算法:了解即可,一般用不到。除非你工作中确实遇到了,大量处理回文串的场景。不过几乎是遇不到的。遇到了再学习也可以
class Solution {
    /**
        方法一:Manacher 算法 O(n) 空间复杂度O(n) 。非常复杂,推荐先掌握方法二
        比如abaaba这个字符串
        先统一奇偶性,变成#a#b#a#a#b#a#,就是用一个特殊字符,将每一个字符分隔,首尾也要
            那么偶数个的字符串abaaba的中心就是aba(#)aba中间的#号
            奇数个的字符串aba的中心是#a#b#a# 正好是中间的b
            而且无论源串是奇数还是偶数,加完#号后,都是奇数
            而且加完后的回文串长度是2*n+1.(aba => #a#b#a# = 2*3+1 = 7. abba => #a#b#b#a# = 2*4+1 = 9)
            因此我们还原时,只需要(len-1)/2 就可以了。(#a#b#a# = (7-1)/2 = 3. #a#b#b#a# = (9-1)/2 = 4)
        
     */
    public String longestPalindrome(String s) { 
        int start = 0, end = -1;
        StringBuffer t = new StringBuffer("#");
        for (int i = 0; i < s.length(); ++i) {
            t.append(s.charAt(i));
            t.append('#');
        }
        t.append('#');
        s = t.toString();

        List<Integer> arm_len = new ArrayList<Integer>();
        int right = -1, j = -1;
        for (int i = 0; i < s.length(); ++i) {
            int cur_arm_len;
            if (right >= i) {
                int i_sym = j * 2 - i;
                int min_arm_len = Math.min(arm_len.get(i_sym), right - i);
                cur_arm_len = expand(s, i - min_arm_len, i + min_arm_len);
            } else {
                cur_arm_len = expand(s, i, i);
            }
            arm_len.add(cur_arm_len);
            if (i + cur_arm_len > right) {
                j = i;
                right = i + cur_arm_len;
            }
            if (cur_arm_len * 2 + 1 > end - start) {
                start = i - cur_arm_len;
                end = i + cur_arm_len;
            }
        }

        StringBuffer ans = new StringBuffer();
        for (int i = start; i <= end; ++i) {
            if (s.charAt(i) != '#') {
                ans.append(s.charAt(i));
            }
        }
        return ans.toString();
    }

    public int expand(String s, int left, int right) {
        while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
            --left;
            ++right;
        }
        return (right - left - 2) / 2;
    }
}
  1. 中心扩展法:推荐掌握的方法,面试遇到了,可以快速准确的做出相关题目
class Solution {
    /**
        方法二:中心扩展法(中心枚举) O(n^2) 空间复杂度O(1),推荐的方法,简单,8ms
        比如abcba这个字符串
        我们先找到最开始的a,它本身是回文串,然后中心扩散,发现左边没有,那么长度为1(right-left-1)
        然后找到b,本身回文串,扩散,a!=c.因此abc不是回文串,只有b本身,长度为1
        然后c为中心,扩散,b = b,bcb是回文串,可以继续扩散。a=a,那么abcba是回文串,再次扩散,没有了,长度为5

        例外的abccba这样的字符串也是回文串,cc为中心
        同样的abcccba以c为中心,abccccba,以cc,就是中间的c(cc)c,为中心

        如何获取找到的回文串下标呢?
        abccba是回文串,长度len为6,中心为cc,
        循环下标index为2指向中心,也就是说len的一半,让index减去,就是起始下标
        但是下标从0开始,所以,(len-1)/2才对,因此
        start = i-(len-1)/2
        同理end = i+len/2; 
     */
    public String longestPalindrome1(String s) {
        if(s==null || s.length()<1) return"";

        char c[] = s.toCharArray();
        int start = 0,end = 0;
        for(int i = 0;i<s.length();i++){
            int len1 = expandAroundCenter(c,i,i);
            int len2 = expandAroundCenter(c,i,i+1);
            int len = Math.max(len1,len2);
            if(len > end-start){
                start=i-(len-1)/2;
                end = i+len/2;
            }
        }
        return s.substring(start,end+1);
    }
    private int expandAroundCenter(char[] c,int i,int j){
        while(i>=0 && j<c.length && c[i] == c[j]){
            i--;j++;
        }
        return j - i - 1;
    }
}
  1. 动态规划, 驴唇不对马嘴的感觉。处理回文串感觉完全不是动态规划该干的。
class Solution {
    //方法三:动态规划 O(n^2) 空间复杂度O(n^2) 不推荐,浪费资源,160ms
    // 字符串[b,a,b,a,d]
    // 下标  [0,1,2,3,4]

    //动态规划:[0~4]这个串babad是否回文,取决于0和4对应字符(b,d)是否相同,以及它中间的1~3对应的子串(aba)是否是回文串
    //因为b和d不同,所以不是回文串
    //[1~3]aba这个串是否回文,取决于1和3对应字符a,a是否相同,以及中间2对应的子串,b是不是回文串,
    //因为a=a,并且b是回文串(1个字符就是回文串),所以[1~3]是回文串,长度为3-1+1 = 3(j-i+1)
    //规划表 arr[i][j] = arr[i-1][]
    //  0       1       2       3       4
    //0 true    false   true    false   false
    //1         true    false   true    false
    //2                 true    false   fasle
    //3                         true    fasle
    //4                                 true
    public String longestPalindrome2(String s) {
        int len = s.length();
        if (len < 2) {
            return s;
        }
        int maxLen = 1;
        int begin = 0;
        // dp[i][j] 表示 s[i..j] 是否是回文串
        boolean[][] dp = new boolean[len][len];
        // 初始化:所有长度为 1 的子串都是回文串
        for (int i = 0; i < len; i++) {
            dp[i][i] = true;
        }
        char[] charArray = s.toCharArray();
        // 递推开始
        // 先枚举子串长度
        for (int L = 2; L <= len; L++) {
            // 枚举左边界,左边界的上限设置可以宽松一些
            for (int i = 0; i < len; i++) {
                // 由 L 和 i 可以确定右边界,即 j - i + 1 = L 得
                int j = L + i - 1;
                // 如果右边界越界,就可以退出当前循环
                if (j >= len) {
                    break;
                }

                if (charArray[i] != charArray[j]) {
                    dp[i][j] = false;
                } else {
                    if (j - i < 3) {
                        dp[i][j] = true;
                    } else {
                        dp[i][j] = dp[i + 1][j - 1];
                    }
                }

                // 只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置
                if (dp[i][j] && j - i + 1 > maxLen) {
                    maxLen = j - i + 1;
                    begin = i;
                }
            }
        }
        return s.substring(begin, begin + maxLen);
    }
    
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
  1. 栈解题思路:倒着入栈,双栈
  1. 倒着入栈:适用于出栈时想让输出是正序的情况。比如字符串’abc’,如果倒着入栈,那么栈中元素是(c,b,a)。栈是先进后出,此时出栈,结果为abc。
  2. 双栈:适用于实现队列的先入先出效果。一个栈负责输入,另一个栈负责输出。
SAP中成本估算没有找到工艺路线消息处理实例 在针对成品的标准成本核算处理过程中,系统中会经由设定好的策略来收集成品相关成本组成,最终计算出产成品的标准成本。关于成本组成,可以归纳为三个基本要素,料,工,费。即标准成本就是要知道,生产一件成品,需要消耗多少钱的原材料?消耗多少钱的人工?以及其它的间接消耗? 某日,接到CO同事的反馈,在用CK11N做产成品标准价格核算时,提示没有工艺路线确定,但该消息为绿灯,可以通过。基于业务上的谨慎,提出分析。 从提示可以看出问题与工艺路线有关。因为,成品工艺路线中设定有成品生产所耗工时,所以,在计算产成品标准 阅读详情

相关推荐

【规则引擎连载3】 WebSphere ILOG JRules 开发——新建一个规则项目

规则项目依赖于bom,bom来自于一个Java项目,所以在建规则项目之前,需要先建立一个Java项目,也就是建模。 说明:原则上是一个规则项目,一个bom。如果规则项目很多,并且每个规则项目的bom都是一样的,那么可以将bom提取出来,单独作为一个项目,这样减少不必要的重复操作,减少维护成本,降低出错几率。这里逐步讲解两种方法来创建规则项目,推荐第二种。 本文主要建立两种规则项目与bom之间的关系,编写相关的规则内容,如操作规则、规则流、决策表等,在后续文章中详细讲解 。

manman的分享 2331

java数据结构与算法刷题-----LeetCode21:合并两个有序链表

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846 思路分析 现在有两个链表,我们要将其合并为一个 最好不要改变原有链表,也就是最终合并结果,使用新的链表来保存 可以采用双指针的思路,而链表本身就是一个指针(指向自己并且保存自己的下一个元素) 所以,我们对比两个指针的值,小的就插入到新链表中...

殷志鹏的博客 1234

yolov5 部署jetson nano(通用) 保姆级教学

Jetson nano从配置环境到yolov5成功推理检测全过程 文章目录Jetson nano从配置环境到yolov5成功推理检测全过程一、烧录镜像二、配置环境并成功推理1.更新系统和包2、配置环境2.1 配置CUDA2.2 修改Nano板的显存1.打开终端输入:2.修改nvzramconfig.sh文件:3.重启:4.终端输入:3、安装archiconda(也就是jetson nano板上的anaconda)1.下载地址:2.安装:3.测试conda:4.创建运行yolov5的虚拟环境:5.在conda

weixin_44312422的博客 3万+

删除重复的电子邮箱

1、问题描述 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。 2、 创建表格 代码 create table if not exists Person(Id varchar(8), Email varchar(255)); delete * from Person where 1=1; // truncate table Person; insert into Person (Id, Email) values( '1', 'john@ex

qq_45793102的博客 236

双足肌肉骨骼机器人

Clone Alpha的技术突破标志着人类进入生物-机械融合的新纪元,但其影响远超技术范畴。从伦理框架重建(如拉马克进化算法中的知识传递机制)到经济模式革新(如UBI应对机器人失业潮),需全球协作制定前瞻性政策。若放任技术无序扩张,人类社会或将面临“能力断层”与“控制权丧失”的双重危机;反之,若以人类福祉为核心导向,仿生机器人亦可成为弥合残障歧视、提升整体文明层级的钥匙。当下选择,将决定人类究竟是技术的创造者,还是被重构的客体。

百态·数智思维 | 聚焦大数据、量化与未来AI 987

有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(中)

有限时间滑模控制(FTSMC)和固定时间滑模控制(FixTSMC)是两种重要的控制策略,旨在实现系统状态的快速收敛。FTSMC通过设计滑模面和控制律,确保系统状态在有限时间内收敛到原点,但其收敛时间与初始状态相关。FixTSMC则进一步优化,使收敛时间与初始状态无关,适用于高动态环境,具有更强的鲁棒性和更平滑的控制信号。两种方法均通过李雅普诺夫函数证明其稳定性,并通过仿真验证其有效性。FixTSMC在工程应用中更为可靠,尤其适合安全关键系统。

Lyajpunov的博客 3225

Java求回文数的两种巧妙方法---LeetCode9 回文数

Java求回文数两种巧妙方法详解

Forever_xxx的博客 1454

Windows下用RKDevTool解包update.img的完整流程(含常见错误排查)

本文详细介绍了在Windows系统下使用RKDevTool工具解包update.img固件的完整流程。从工具准备、环境搭建到逐步解包操作,重点解析了输出文件结构,并提供了修改分区后重新打包的实战方法。文章还针对解包失败、打包错误等常见问题提供了详细的排查与解决方案,旨在帮助嵌入式开发者和爱好者高效完成固件分析与定制工作。

aa123的博客 718

牛客Top200---最长回文字符串(java)

题目 题解:中心扩展法 描述:遍历,从左到右遍历,然后向两端扩展 假设每个字符都是回文串最中心的字符,从中心字符向两边扩展,若左右字符不同则他就不会是回文串。 回文字符串需要分情况考虑,分奇偶两种情况,为奇数是i==i,然后向两边扩展,当为偶数时,先判断 i ==i+1 字符是否一样,一样则向两边扩展,否则他就不可能是回文串。 最后回文长度就是right - left -1,这个可以举两个例子 import java.util.*; public class Solution { publi

小样yx的博客 1961

Android存储空间不足下,APP出现奔溃等情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 1. 问题起因     实时录制视频,使用getExternalCacheDir()函数返回的路径作为文件缓存区 2. 问题产生     系统在空间不足的情况下第一清除getExternalCacheDir和getCache文件下的缓存,导致正在录制的视频出现Error。 3. 解决方案     第一

OverseasAndroid的博客 4160

CAN-do-paser:Java开发的CAN总线数据帧解析库

CAN总线数据帧使用DBC文件信息解析为物理量,基于Java开发的数据解析工具。

佳瑞的博客 1134

java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...

1. 回文串作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba、bbaabb。这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的字符数是偶数。前面举的abcdcba就是奇回文,bbaabb就是偶回文。判断一个字符串是否是回文串很简单,只要从字符串的两端开始往中间扫描,全部匹配成功则是回文串,只要有一次匹配失败,那么就不是回文串。...

weixin_27130513的博客 619

【推荐100个unity插件之7】使用BehaviorDesigner插件制作BOSS的AI行为树

Behavior Designer是一个行为树插件,是一款为了让策划,程序员,美术人员方便使用的可视化编辑器。Behavior Designer提供了强大的AP1可以让你轻松的创建tasks(任务),配合uScript和PlayMaker这样的插件,可以不费吹灰之力就能够创建出强大的Al系统,而无需写行代码。(不懂PlayMaker的,我后面在单独出文章介绍一下,可以期待一下)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 6575

【leetcode刷题】20.最长回文子串——Java版

气死

公号:一条coding 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java实现 LeetCode 5 最长回文子串

5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic...

南 墙 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

「力扣」第 5 题:最长回文子串(暴力解法、中心扩散、动态规划)

「力扣」第 5 题:最长回文子串(暴力解法、中心扩散、动态规划) 解释题意 大家好,这里是「力扣」视频题解第 5 题:最长回文子串。 这道题给我们一个字符串 s,让我们找出这个字符串 s 的最长回文子串,并且告诉我们,s 的最大长度为 1000。 看到这个提示,我们简单计算一下,100010001000 的平方是 101010 的 666 次方,经验告诉我们,可以设计一个大欧 N 方的算法。(这里...

李威威的博客 2826

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

力扣刷题路线

结合高频题、经典题和算法思想学习建议,分阶段从基础到进阶编排,覆盖所有核心标签,并标注题号与学习方法。:画图模拟快慢指针移动,如移动零时快指针探路、慢指针标记非零位置。:括号生成时,左括号数不能超过n,右括号数不能超过左括号数。:LCA问题中,若左右子树均含目标节点,则当前节点为祖先。:终止条件、递归调用、返回值,如二叉树深度递归返回。:掌握虚拟头节点、递归反转、环形检测。:掌握索引操作、快慢指针、滑动窗口。:熟悉括号匹配、单调栈、层序遍历。:熟悉反转、哈希统计、回文处理。

FAQEW的博客 1819

LeetCode第5题:最长回文子串

题目: 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 注:回文字符串就是该字符串正着读和倒着读的顺序一模一样。 一、算法介绍 算法:动态规划 思路:一个回文子串去掉两头以后,剩下的部分依然是回文子串。 状态:dp[i][j]表示子串s[i…j]是否为回文子串。 状态转移方程:dp[i][j] = (s[i]==s[j]) and dp[i+1][j-1] 边界条件:j-1-(i+1)+1

daokoi的博客 2109

5. 最长回文子串-LeetCode(Java)

​ 最长回文子串-LeetCode(Java) 题目:5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 提示: 1

m0_60416689的博客 2523

算法:leetcode_5_最长回文子串

摘要:本文介绍了两种求解最长回文子串的方法:动态规划和中心扩散法。动态规划通过构建二维dp表记录子串状态,从下到上、从左到右遍历字符串,时间复杂度较高但思路清晰。中心扩散法则以每个字符(或相邻字符对)为中心向两边扩展寻找回文,更高效且代码简洁。

bugMaker_0621的博客 1071

LeetCode算法日记 - Day 33: 最长公共前缀、最长回文子串

本文解析了两个字符串处理算法问题:1)最长公共前缀:通过纵向扫描字符串数组,逐列比较字符是否一致,时间复杂度O(S)(S为总字符数),空间O(1);2)最长回文子串:采用中心扩展法,枚举所有可能的奇偶中心向外扩展,时间复杂度O(n²),空间O(1)。两个问题均需注意边界条件和索引处理,前者需保证所有字符串同步比较,后者需处理奇偶中心情况。提供的Java实现代码结构清晰,能有效解决问题。

Miraitowa_cheems的博客 854

算法|LeetCode(力扣)经典题:动态规划

LeetCode经典(数据结构与算法)题刷题指南:动态规划篇

峰峰的博客 2956

【算法入门】5. 最长回文子串 LeetCode 5:最长回文子串 - 动态规划与中心扩展法详解(Java & JavaScript)(Java/JS实现)

本文介绍了如何解决最长回文子串问题,重点讲解了中心扩展法的实现。该方法通过以每个字符或字符间隙为中心向两边扩展,检测最长回文子串。文章提供了Java和JavaScript两种语言的详细实现代码,分析了算法的时间复杂度为O(n²),空间复杂度为O(1)。该方法简洁高效,是解决此问题的经典思路,适合面试和日常算法练习。

南北极之间 1464

Leetcode刷题java之5. 最长回文子串

执行结果: 通过 显示详情 执行用时 :12 ms, 在所有 Java 提交中击败了72.89% 的用户 内存消耗 :36.4 MB, 在所有 Java 提交中击败了68.95%的用户 题目: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 ...

逆水行舟,不进则退 526
上一篇: java数据结构与算法刷题-----LeetCode4:寻找两个正序数组的中位数
下一篇: java数据结构与算法刷题-----LeetCode6:Z 字形变换
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值