Middle-题目106:5. Longest Palindromic Substring

本文介绍了两种寻找字符串中最长回文子串的方法:一种基于简单检查的算法和Manacher算法。通过Java实现,对比了两种方法的时间效率,并对Manacher算法进行了详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目原文:
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
题目大意:
求出字符串S的最长回文子串。
题目分析:
使用了discuss的神算法,我根本看不懂……求大神解答……(好像还是个 O(n2) 的算法)大概是每向右增加一个字符,就判断能不能向左延伸之类的。
本题有一个线性算法,叫manacher算法,参见https://en.wikipedia.org/wiki/Longest_palindromic_substring#CITEREFManacher1975
源码:(language:java)
方法一:

public class Solution {
    public String longestPalindrome(String s) {
        char[] ca = s.toCharArray();
        int rs = 0, re = 0;
        int max = 0;
        for(int i = 0; i < ca.length; i++) {
            if(isPalindrome(ca, i - max - 1, i)) {
                rs = i - max - 1; re = i;
                max += 2;
            } else if(isPalindrome(ca, i - max, i)) {
                rs = i - max; re = i;
                max += 1;
            }
        }
        return s.substring(rs, re + 1);
    }

    private boolean isPalindrome(char[] ca, int s, int e) {
        if(s < 0) return false;

        while(s < e) {
            if(ca[s++] != ca[e--]) return false;
        }
        return true;
    }
}

方法二:(manacher算法,改编自wikipaedia上的代码)

public class Solution {
    public String longestPalindrome(String s) {
        if (s==null || s.length()==0)
            return "";
        char[] s2 = addBoundaries(s.toCharArray());
        int[] p = new int[s2.length]; 
        int c = 0, r = 0; // Here the first element in s2 has been processed.
        int m = 0, n = 0; // The walking indices to compare if two elements are the same
        for (int i = 1; i<s2.length; i++) {
            if (i>r) {
                p[i] = 0; m = i-1; n = i+1;
            } else {
                int i2 = c*2-i;
                if (p[i2]<(r-i)) {
                    p[i] = p[i2];
                    m = -1; // This signals bypassing the while loop below. 
                } else {
                    p[i] = r-i;
                    n = r+1; m = i*2-n;
                }
            }
            while (m>=0 && n<s2.length && s2[m]==s2[n]) {
                p[i]++; m--; n++;
            }
            if ((i+p[i])>r) {
                c = i; r = i+p[i];
            }
        }
        int len = 0; c = 0;
        for (int i = 1; i<s2.length; i++) {
            if (len<p[i]) {
                len = p[i]; c = i;
            }
        }
        char[] ss = Arrays.copyOfRange(s2, c-len, c+len+1);
        return String.valueOf(removeBoundaries(ss));
    }
    private  char[] addBoundaries(char[] cs) {
        if (cs==null || cs.length==0)
            return "||".toCharArray();

        char[] cs2 = new char[cs.length*2+1];
        for (int i = 0; i<(cs2.length-1); i = i+2) {
            cs2[i] = '|';
            cs2[i+1] = cs[i/2];
        }
        cs2[cs2.length-1] = '|';
        return cs2;
    }
    private  char[] removeBoundaries(char[] cs) {
        if (cs==null || cs.length<3)
            return "".toCharArray();

        char[] cs2 = new char[(cs.length-1)/2];
        for (int i = 0; i<cs2.length; i++) {
            cs2[i] = cs[i*2+1];
        }
        return cs2;
    }    
}

成绩:
方法一:9ms,beats 96.88%,众数13ms,4.50%
方法二:11ms,beats 92.14%
cmershen的碎碎念:
Manacher, Glenn (1975), “A new linear-time “on-line” algorithm for finding the smallest initial palindrome of a string”, Journal of the ACM 22 (3): 346–351, doi:10.1145/321892.321896.
这篇论文详细论证了Manacher算法,如果无聊可以研究一下。
方法二不如方法一快是因为数据量不够大(S.length<10^3),且此题个人认为应归为hard。

; write=0.006 s, sync=0.001 s, total=0.024 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB 2025-07-25 11:25:49.627 UTC [1] LOG: database system is ready to accept connections 2025-07-25 11:25:49.628 UTC [11305] FATAL: could not open file "global/pg_filenode.map": No such file or directory 2025-07-25 11:25:49.628 UTC [11306] FATAL: could not open file "global/pg_filenode.map": No such file or directory 2025-07-25 11:25:49.629 UTC [1] LOG: autovacuum launcher process (PID 11305) exited with exit code 1 2025-07-25 11:25:49.629 UTC [1] LOG: terminating any other active server processes 2025-07-25 11:25:49.630 UTC [1] LOG: background worker "logical replication launcher" (PID 11306) exited with exit code 1 2025-07-25 11:25:49.631 UTC [1] LOG: all server processes terminated; reinitializing 2025-07-25 11:25:49.680 UTC [11307] LOG: database system was interrupted; last known up at 2025-07-25 11:25:49 UTC 2025-07-25 11:25:49.753 UTC [11307] LOG: database system was not properly shut down; automatic recovery in progress 2025-07-25 11:25:49.759 UTC [11307] LOG: invalid record length at 0/1478CF0: wanted 24, got 0 2025-07-25 11:25:49.759 UTC [11318] FATAL: the database system is in recovery mode 2025-07-25 11:25:49.759 UTC [11307] LOG: redo is not required 2025-07-25 11:25:49.765 UTC [11308] LOG: checkpoint starting: end-of-recovery immediate wait 2025-07-25 11:25:49.774 UTC [1] LOG: received smart shutdown request 2025-07-25 11:25:49.789 UTC [11308] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.008 s, sync=0.001 s, total=0.026 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB 2025-07-25 11:25:49.793 UTC [11308] LOG: shutting down 2025-07-25 11:25:49.794 UTC [11308] LOG: checkpoint starting: shutdown immediate 2025-07-25 11:25:49.810 UTC [11308] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.002 s, sync=0.001 s, total=0.017 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=0 kB 2025-07-25 11:25:49.826 UTC [1] LOG: database system is shut down [root@k8s-master1 harbor]# [root@k8s-master1 harbor]# kubectl logs harbor-core-75cd4f54b5-b5stj -n harbor --previous Appending internal tls trust CA to ca-bundle ... find: '/etc/harbor/ssl': No such file or directory Internal tls trust CA appending is Done. init global config instance failed. If you do not use this, just ignore it. open conf/app.conf: no such file or directory 2025-07-25T11:29:52Z [INFO] [/controller/artifact/annotation/parser.go:85]: the annotation parser to parser artifact annotation version v1alpha1 registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cncf.helm.config.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cnab.manifest.v1 registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cnai.model.manifest.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.oci.image.index.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.distribution.manifest.list.v2+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.distribution.manifest.v1+prettyjws registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.oci.image.config.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.container.image.v1+json registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.goharbor.harbor.sbom.v1 registered 2025-07-25T11:29:52Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.wasm.config.v1+json registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/native/adapter.go:36]: the factory for adapter docker-registry registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/aliacr/adapter.go:40]: the factory for adapter ali-acr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/awsecr/adapter.go:44]: the factory for adapter aws-ecr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/azurecr/adapter.go:29]: Factory for adapter azure-acr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/dockerhub/adapter.go:40]: Factory for adapter docker-hub registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/dtr/adapter.go:36]: the factory of dtr adapter was registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/githubcr/adapter.go:43]: the factory for adapter github-ghcr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/gitlab/adapter.go:33]: the factory for adapter gitlab registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/googlegcr/adapter.go:37]: the factory for adapter google-gcr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/huawei/huawei_adapter.go:40]: the factory of Huawei adapter was registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/jfrog/adapter.go:42]: the factory of jfrog artifactory adapter was registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/quay/adapter.go:53]: the factory of Quay adapter was registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/tencentcr/adapter.go:55]: the factory for adapter tencent-tcr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/volcenginecr/adapter.go:40]: the factory for adapter volcengine-cr registered 2025-07-25T11:29:52Z [INFO] [/pkg/reg/adapter/harbor/adaper.go:31]: the factory for adapter harbor registered 2025-07-25T11:29:52Z [INFO] [/core/controllers/base.go:187]: Config path: /etc/core/app.conf 2025-07-25T11:29:52Z [INFO] [/core/main.go:148]: initializing cache ... 2025-07-25T11:29:52Z [INFO] [/core/main.go:167]: initializing configurations... 2025-07-25T11:29:52Z [INFO] [/lib/config/systemconfig.go:178]: key path: /etc/core/key 2025-07-25T11:29:52Z [INFO] [/lib/config/config.go:92]: init secret store 2025-07-25T11:29:52Z [INFO] [/core/main.go:169]: configurations initialization completed 2025-07-25T11:29:52Z [INFO] [/common/dao/base.go:67]: Registering database: type-PostgreSQL host-harbor-database port-5432 database-registry sslmode-"disable" 2025-07-25T11:29:52Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:29:54Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:29:56Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:29:58Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:00Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:02Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:04Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:06Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:08Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:10Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:12Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:14Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:16Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:18Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:20Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:22Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:24Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:26Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:28Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:30Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:32Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:34Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:36Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:38Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:40Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:42Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:44Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:46Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:48Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:50Z [ERROR] [/common/utils/utils.go:108]: failed to connect to tcp://harbor-database:5432, retry after 2 seconds :dial tcp 10.0.192.44:5432: connect: connection refused 2025-07-25T11:30:52Z [FATAL] [/core/main.go:190]: failed to initialize database: failed to connect to tcp:harbor-database:5432 after 60 seconds [root@k8s-master1 harbor]# kubectl logs harbor-jobservice-6457b57477-7qgt2 -n harbor --previous Appending internal tls trust CA to ca-bundle ... find: '/etc/harbor/ssl': No such file or directory Internal tls trust CA appending is Done. 2025-07-25T11:30:54Z [INFO] [/controller/artifact/annotation/parser.go:85]: the annotation parser to parser artifact annotation version v1alpha1 registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cncf.helm.config.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cnab.manifest.v1 registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.cnai.model.manifest.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.oci.image.index.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.distribution.manifest.list.v2+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.distribution.manifest.v1+prettyjws registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.oci.image.config.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.docker.container.image.v1+json registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.goharbor.harbor.sbom.v1 registered 2025-07-25T11:30:54Z [INFO] [/controller/artifact/processor/processor.go:59]: the processor to process media type application/vnd.wasm.config.v1+json registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/native/adapter.go:36]: the factory for adapter docker-registry registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/aliacr/adapter.go:40]: the factory for adapter ali-acr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/awsecr/adapter.go:44]: the factory for adapter aws-ecr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/azurecr/adapter.go:29]: Factory for adapter azure-acr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/dockerhub/adapter.go:40]: Factory for adapter docker-hub registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/dtr/adapter.go:36]: the factory of dtr adapter was registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/githubcr/adapter.go:43]: the factory for adapter github-ghcr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/gitlab/adapter.go:33]: the factory for adapter gitlab registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/googlegcr/adapter.go:37]: the factory for adapter google-gcr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/huawei/huawei_adapter.go:40]: the factory of Huawei adapter was registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/jfrog/adapter.go:42]: the factory of jfrog artifactory adapter was registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/quay/adapter.go:53]: the factory of Quay adapter was registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/tencentcr/adapter.go:55]: the factory for adapter tencent-tcr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/volcenginecr/adapter.go:40]: the factory for adapter volcengine-cr registered 2025-07-25T11:30:54Z [INFO] [/pkg/reg/adapter/harbor/adaper.go:31]: the factory for adapter harbor registered 2025-07-25T11:30:54Z [INFO] [/pkg/config/rest/rest.go:47]: get configuration from url: http://harbor-core:80/api/v2.0/internalconfig 2025-07-25T11:30:54Z [ERROR] [/pkg/config/rest/rest.go:50]: Failed on load rest config err:Get "http://harbor-core:80/api/v2.0/internalconfig": dial tcp 10.5.232.220:80: connect: connection refused, url:http://harbor-core:80/api/v2.0/internalconfig panic: failed to load configuration, error: failed to load rest config goroutine 1 [running]: main.main() /harbor/src/jobservice/main.go:46 +0x3ae [root@k8s-master1 harbor]# 查看日子输出这些,我应该如何解决呢,目前正在用kubernetes集群搭建harbor仓库,想让root@k8s-master1 harbor]# kubectl get pod -n harbor NAME READY STATUS RESTARTS AGE harbor-core-75cd4f54b5-b5stj 0/1 CrashLoopBackOff 11 (118s ago) 26m harbor-database-0 0/1 Running 4 (3m16s ago) 26m harbor-jobservice-6457b57477-7qgt2 0/1 CrashLoopBackOff 13 (3m23s ago) 26m harbor-portal-5b6b5f7494-gcc8n 1/1 Running 1 (10m ago) 26m harbor-redis-0 1/1 Running 1 (10m ago) 26m harbor-registry-5fb967b497-d4r4r 2/2 Running 2 (10m ago) 26m harbor-trivy-0 1/1 Running 1 (10m ago) 26m全是running
07-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值