substr(i,n)函数

substr()函数,字符串截取函数,从下表i开始,截取到长度为n的字符串。形式s.substr(i,n);

例题为力扣最长回文子串问题,题号为5.

class Solution {
public:
    string longestPalindrome(string s) {
        if(s.size()<=0)
        return "";
        int maxs=1;
        string result="";
        result+=s[0];
        for(int i=1;i<s.size();i++)
        {
            //首先看看有没有可能作为中点回文,奇数
            int j=i-1;
            int k=i+1;
            while(j>=0 && k<s.size() && s[j]==s[k])
            {
                j--;
                k++;
            }
            if(maxs<k-j-1)
            {
                maxs=k-j-1;
                result=s.substr(j+1,maxs);
            }
            //然后来看看有没有成为偶数回文串的可能,偶数,取其为中间靠右的开始
            j=i-1;
            k=i;
             while(j>=0 && k<s.size() && s[j]==s[k])
            {
                j--;
                k++;
            }
            if(maxs<k-j-1)
            {
                maxs=k-j-1;
                result=s.substr(j+1,maxs);
            }
        }
        return result;
    }
};

 方法改进,我们为什么要将字符串的复制截取放到每一个语句循环中间呢,我们完全可以将其最后才复制,每次只需要记录一下下标即可

string longestPalindrome(string s) {
        if(s.size()<=0)
        return "";
        else if(s.size()==1)
        {
            string r="";
            r+=s[0];
            return r;
        }
        int maxs=1;
        string result="";
        result+=s[0];
        int Index;
        for(int i=1;i<s.size();i++)
        {
            //首先看看有没有可能作为中点回文,奇数
            int j=i-1;
            int k=i+1;
            while(j>=0 && k<s.size() && s[j]==s[k])
            {
                j--;
                k++;
            }
            if(maxs<k-j-1)
            {
                maxs=k-j-1;
                Index=j+1;
            }
            //然后来看看有没有成为偶数回文串的可能,偶数,取其为中间靠右的开始
            j=i-1;
            k=i;
             while(j>=0 && k<s.size() && s[j]==s[k])
            {
                j--;
                k++;
            }
            if(maxs<k-j-1)
            {
                maxs=k-j-1;
                Index=j+1;
            }
        }
        result=s.substr(Index,maxs);
        return result;
    }

猜你喜欢

转载自www.cnblogs.com/awangkuo/p/12531296.html