常用演算法之驗證迴文串
今天給大家分享一道面試中經常碰到的簡單演算法題目 - 檢測迴文串。
題目:
給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
示例1:
輸入: "A man, a plan, a canal: Panama"
輸出: true
示例2:
輸入: "race a car"
輸出: false
思路:
利用雙指標。
初始化兩個指標 i、j,i從字串左側開始,j從字串右側開始,我們每次將 i + 1,將 j - 1 判斷兩個字元是否相等,如果兩個指標能夠相遇就說明是迴文串,不然就不是迴文串。
Go程式碼示例
func isPalindrome(s string) bool {
// 將字串轉為小寫
s = strings.ToLower(s)
// 定義兩個初始化指標
i, j := 0, len(s) - 1
// 當 i >= j 時兩個指標相遇說明是迴文
for i < j {
// 非字母h或數字s時左側指標加一繼續迴圈
if !isanum(s[i]) {
i++
continue
}
// 非字母h或數字s時右側指標減一繼續迴圈
if !isanum(s[j]) {
j--
continue
}
// 當對稱字元不想等說明不是迴文
if s[i] != s[j] {
return false
}
i++
j--
}
return true
}
func isanum(x byte) bool {
return (x >= 'A' && x <= 'Z') || (x >= 'a' && x <= 'z') || (x >= '0' && x <= '9')
}
複雜度分析
-
時間複雜度:O(n)O(∣s∣)
-
空間複雜度:O(1)
相關文章
- LeetCode125. 驗證迴文串LeetCode
- 演算法之字串——最長迴文子串演算法字串
- Leetcode 344:驗證迴文串(最詳細解決方案!!!)LeetCode
- 演算法-兩最長迴文子串演算法
- (迴文串)leetcode各種迴文串問題LeetCode
- 最長迴文子串 V2(Manacher演算法)演算法
- java 最長迴文子串Java
- HDU 3068 最長迴文(Manacher演算法解決最長迴文串問題)演算法
- leedcode-最長迴文串
- 每天一道演算法題:最長迴文子串演算法
- 今日面試題:最長迴文子串;及迴文分割分析面試題
- hdu5371 最長迴文子串變形(Manacher演算法)演算法
- [LeetCode] Palindrome Number 驗證迴文數字LeetCode
- hihocoder 1032 最長迴文子串 (Manacher演算法 詳解+模板)演算法
- LeetCode - 409 - 最長迴文串LeetCode
- LEECODE 5 求最長迴文子串
- 程式碼隨想錄演算法訓練營 | 647. 迴文子串,516.最長迴文子序列演算法
- python中快速驗證輸入的是否為迴文Python
- [動態規劃] 六、最長迴文子串動態規劃
- LeetCode 5.最長迴文子串LeetCode
- 判斷迴文串 字串/數字相互轉換字串
- Amazon面試題:尋找最長迴文子串面試題
- 演算法題:迴文演算法
- 從0打卡leetcode之day 6--最長迴文串LeetCode
- 程式碼隨想錄演算法訓練營day46| 647. 迴文子串 516.最長迴文子序列演算法
- 迴文串問題(動態規劃DP C++)動態規劃C++
- Leetcode[字串] 5. 最長迴文子串LeetCode字串
- SYZOJ - 補充構造迴文串(動態規劃)動態規劃
- LeetCode-5. 最長迴文子串(Manacher)LeetCode
- 翻譯數字串;及最長迴文子串分析字串
- C# 常用驗證C#
- leetcode第九題Palindrome Number 驗證迴文數字LeetCode
- 程式碼隨想錄day46 || 647 迴文子串, 516 最長迴文子序列
- 程式碼隨想錄演算法訓練營第五十七/天 | 516. 最長迴文子序列,647. 迴文子串演算法
- iOS標準庫中常用資料結構和演算法之位串iOS資料結構演算法
- 每日一道 LeetCode (48):最長迴文子串LeetCode
- 動態規劃題:把一個字串變為迴文串動態規劃字串
- [LeetCode] Longest Palindromic Substring 最長迴文子串LeetCode