647. Palindromic Substrings

package LeetCode_647

/**
 * 647. Palindromic Substrings
 * https://leetcode.com/problems/palindromic-substrings/
 *
Given a string, your task is to count how many palindromic substrings in this string.
The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.

Example 1:
Input: "abc"
Output: 3
Explanation: Three palindromic strings: "a", "b", "c".

Example 2:
Input: "aaa"
Output: 6
Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa".

Note:
1. The input string length won't exceed 1000.
 * */
class Solution {
    /*
    * solution: check the palindrome of odd length palindromic substring and even length palindromic substring,
    * for example: aabaa, checking:
     loop 1. center on a and aa, scan to left and right,
     2. center on a and ab, scan to left and right,
     3. center on b and ba, scan to left and right,

    * Time complexity:O(n^2), Space complexity:O(1)
    * */

    private var count = 0

    fun countSubstrings(s: String): Int {
        if (s == null || s.isEmpty()) {
            return 0
        }
        for (i in s.indices) {
            //check odd length
            checkPalindrome(s, i, i)
            //check even length
            checkPalindrome(s, i, i + 1)
        }
        return count
    }

    private fun checkPalindrome(string: String, i_: Int, j_: Int) {
        var i = i_
        var j = j_
        while (i >= 0 && j < string.length && string[i] == string[j]) {
            //if substring is palindrome
            count++
            //to trace string in left direction
            i--
            //to trace string in right direction
            j++
        }
    }
}

 

posted @ 2020-11-06 22:54  johnny_zhao  阅读(61)  评论(0编辑  收藏  举报