1. 程式人生 > >LeetCode 647. 迴文子串(C、python)

LeetCode 647. 迴文子串(C、python)

給定一個字串,你的任務是計算這個字串中有多少個迴文子串。

具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。

示例 1:

輸入: "abc"
輸出: 3
解釋: 三個迴文子串: "a", "b", "c".

示例 2:

輸入: "aaa"
輸出: 6
說明: 6個迴文子串: "a", "a", "a", "aa", "aa", "aaa".

注意:

輸入的字串長度不會超過1000。

C

int countSubstrings(char* s) 
{
    int n=strlen(s);
    int count=0;
    for(int i=0;i<n-1;i++)
    {
        int left=i-1;
        int right=i+1;
        while(left>=0 && right<n)
        {
            if(s[left]==s[right])
            {
                count++;
                left--;
                right++;
            }
            else
            {
                break;
            }
        }
        left=i;
        right=i+1;
        while(left>=0 && right<n)
        {
            if(s[left]==s[right])
            {
                count++;
                left--;
                right++;
            }
            else
            {
                break;
            }
        }            
    }
    return count+n;    
}

python

class Solution:
    def countSubstrings(self, s):
        """
        :type s: str
        :rtype: int
        """
        n=len(s)
        count=0
        for i in range(0,n-1):
            left=i-1
            right=i+1
            while left>=0 and right<n:
                if s[left]==s[right]:
                    count+=1
                    left-=1
                    right+=1
                else:
                    break
            left=i
            right=i+1
            while left>=0 and right<n:
                if s[left]==s[right]:
                    count+=1
                    left-=1
                    right+=1
                else:
                    break
        return count+n