Jackson.tmm

只有奮鬥才能改變命運


  • Home

  • About

  • Posts

  • Leetcodes

  • Notes

  • Review

  • Projects

  • achievement

  • resources

  • Search

Palindromic String(迴文字串)

時間: 2022-06-16   |   分類: leetcode template   leetcode note   coding skill   | 字數: 770 字 | 閱讀: 2分鐘 | 閱讀次數:

Introduction

什麼是Palindromic String 迴文字串

所謂的Palindromic String(迴文字串) 就是以一個字元為中間,而它的左邊以及右邊的組成字元相同。
例子:
abcdcba 以d為中心的左跟右的字元一樣。
cdc左跟右都為c
bcdcb 左跟右都為b
abcdcba 左跟右都為a

要怎麼知道String是否為什麼是palindrome(迴文)

要知道String是否palindrome,我們先得知道Palindromic的規則:

  • 單一的字元都是Palindromic,例如: a,b,g…
  • 某字元的左右字元相同,例如: xax,xbx,xgx…
  • 某字元自己跟右邊或者左邊相同也是一個也使一個palindrome。例如aa,bb
  • 如果某子串為palindrome,而左跟右字元相同,它也會是一個palindrome。例如palindromeaba,它的左右2邊都為字元x,xabax也使一個palindrome; 相反,左跟右字元不相同,則只有子字串為palindrome。

判斷是否palindrome string

我可以從子串的中心點(middle point)開始往外擴展i,j,如果i跟j位置的為相同字元,則繼續往外擴。如果過程中有i,j位置的字元不相同,我們就可以知道它不是一個palindrome。

在尋找Palindrome的時候,我們必要要考慮到odd和evencase。

  • odd case : 會以odd基數的方式擴展。
    • 例如: a -> bab -> cbabc…
  • even case: 會以even偶數的方式擴展
    • 例如: aa -> baab -> cbaabc…

什麼時候會出現這種情況呢? 例如這個例子:baab。如果只使考慮到odd case,他會被認為不是一個Palindrome。baa,aab…都不是合法的Palindrom。所以,我們必須考慮到even case。aa,baab是合法的Palindrom。

Palindrome Template

    //O(n)
    bool isPalindrome(string str,int i,int j){
        while(i>=0 && j < str.length()){
            if(str[i] != str[j]) return false;
            i--;
            j++;
        }
        return true;
    }
    //中心點為Odd(i)
    isPalindrome(str,i,i);
    //中心點為even(i,i+1)
    isPalindrome(str,i,i+1);
#string# #dynamic programming#

文章聲明:Palindromic String(迴文字串)

文章連接:https://ryantokmanmokmtm.github.io/notes/palindromicstring/

作者:jackson.tmm

文章聲明: 本博客文章除特別聲明外,均采用 CC BY-NC-SA 3.0許可協議,轉載請注明出處!

TrieTree(前綴樹/字典樹)
Longest Common SubString(最長公共子序列)
jackson.tmm

jackson.tmm

努力學習,成為更好的自己

14 日誌
28 分類
50 標籤
GitHub Facebook Instagram Linkedin
標籤雲
  • Array
  • String
  • Recursion
  • Binary tree
  • Dynamic programming
  • Learning
  • Recursive
  • Stack
  • Creational
  • Priority queue
© 2022 - 2023 Jackson.tmm
Powered by - Hugo v0.111.2 / Theme by - NexT
0%