迴文判斷(C/C++)
給定一個字串,如何判斷這個字串是否是迴文串?
思路一:直接在字串的首尾兩端各放置一個指標*front和*back,然後開始遍歷整個字串,當*front不再小於*back時完成遍歷。在此過程中,如果出現二者的值不相等,那麼久表示不是迴文串;如果兩個指標指向的字元始終相等就表示該字串是迴文字串。
時間複雜度:O(n)
思路二:先使用快慢指標確定出字串的中間位置,然後分別使用兩個指標從開中間位置開始向相反的方向掃描,知道遍歷完整個字串。
時間複雜度:O(n)
找中間位置的方法:
1、快慢指標;
2、一種有效的計算方法
//m定位到字串的中間位置
int m = ((n >> 1) - 1) >= 0 ? (n >> 1) - 1 : 0; first = str + m; second= str + n - 1 - m;
兩種思路的程式碼如下:
//思路一 #include <iostream> using namespace std; //*s為字串,n為字串的長度 bool IsPalindrome(char *str, int n) { //指向字串首尾的指標 char *front = str; char *back = str + n - 1; if(str==NULL||n<1) { return false; } while (front<back) { if (*front != *back) { return false; } front++; back--; } return true; } int main( ) { char str[] = "abba"; int n = strlen(str); bool sign; sign = IsPalindrome(str, n); if (sign == true) { cout << "此字串是迴文字串"<<endl; } else { cout << "此字串不是迴文字串" << endl; } return 0; } //思路二 #include <iostream> using namespace std; //*s為字串,n為字串的長度 bool IsPalindrome(char *str, int n) { //指向字串首尾的指標 char *first; char *second; if (str == NULL || n<1) { return false; } //m定位到字串的中間位置 int m = ((n >> 1) - 1) >= 0 ? (n >> 1) - 1 : 0; first = str + m; second= str + n - 1 - m; while (first>str) { if (*first!= *second) { return false; } first--; second++; } return true; } int main( ) { char str[] = "abcgba"; int n = strlen(str); bool sign; sign = IsPalindrome(str, n); if (sign == true) { cout << "此字串是迴文字串"<<endl; } else { cout << "此字串不是迴文字串" << endl; } return 0; }
綜上所述,雖然上面兩種方法採用不同的遍歷方式來掃描字串,但是最終的時間複雜度都是一樣,效率基本上是一樣的。
相關推薦
2-8 迴文判斷 (20 分)
迴文是指正讀反讀均相同的字元序列,如“abba”和“abdba”均是迴文,但“good”不是迴文。編寫一個程式,使用棧判定給定的字元序列是否為迴文。 輸入格式: 輸入待判斷的字元序列,按回車鍵結束,字元序列長度<20。 輸出格式: 若字元序列是迴文,輸出“YES”;否則
判斷迴文字串 (20 分)c語言解答(指標法)
判斷迴文字串 (20 分) 本題要求編寫函式,判斷給定的一串字元是否為“迴文”。所謂“迴文”是指順讀和倒讀都一樣的字串。如“XYZYX”和“xyzzyx”都是迴文。 函式介面定義: bool palindrome( char *s ); 函式palindrome判斷輸入字串cha
迴文判斷(C/C++)
給定一個字串,如何判斷這個字串是否是迴文串? 思路一:直接在字串的首尾兩端各放置一個指標*front和*back,然後開始遍歷整個字串,當*front不再小於*back時完成遍歷。在此過程中,如果出現
C語言實現迴文判斷(利用指標的方法)
//判斷迴文(指標實現) #include <stdio.h> #include <stdlib.h> #include <string.h> void IsSymmetrical(char *str) {
判斷一個數是不是迴文數(Java StringBuffer)
這個題目如果是用Java寫,會聯想到StringBuffer類中有一個倒置字串的函式:reverse(),值得注意的是,這個函式返回一個引用,也就是說,進行倒置之後原來的StringBuffer物件也就變了,所以一定要記得在寫的時候注意。
6-3 判斷迴文字串(20 分)
本題要求編寫函式,判斷給定的一串字元是否為“迴文”。所謂“迴文”是指順讀和倒讀都一樣的字串。如“XYZYX”和“xyzzyx”都是迴文。函式介面定義:bool palindrome( char *s ); 函式palindrome判斷輸入字串char *s是否為迴文。若是則返回true,否則返回false。裁
習題8-8 判斷迴文字串(20 分)
題目來源:https://pintia.cn/problem-sets/12/problems/342 本題要求編寫函式,判斷給定的一串字元是否為“迴文”。所謂“迴文”是指順讀和倒讀都一樣的字串。如“XYZYX”和“xyzzyx”都是迴文。 函式介面定義: bool
6-2 判斷迴文字串(20 分)
6-2 判斷迴文字串(20 分) 本題要求編寫函式,判斷給定的一串字元是否為“迴文”。所謂“迴文”是指順讀和倒讀都一樣的字串。如“XYZYX”和“xyzzyx”都是迴文。 函式介面定義: b
判斷是否是迴文數字(java版)
//123321,678876,829928這種兩端對稱的為迴文數字 /* 採用倒轉法,將數字倒轉再來對比 */ public class Huiwenshuzi { public boo
演算法題4:迴文數(python3實現)
判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴
LeetCode題目--驗證迴文字串(python實現)
題目 給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。 說明:本題中,我們將空字串定義為有效的迴文串。 示例 1: 輸入: "A man, a plan, a canal: Panama" 輸出: true 示例 2:
ZZULIOJ.1106: 迴文數(函式專題)
1106: 迴文數(函式專題) 題目描述 一個正整數,如果從左向 右讀(稱之為正序數)和從右向左讀(稱之為倒序數)是一樣的,這樣的數就叫回文數。輸入兩個整數m和n(m<n),輸出區間[m,n]之間的迴文數。 輸入 輸入兩個正整數m和n,輸入保證m<n。 輸出 按從
Partitioning by Palindromes—最小組成迴文串(區間dp)
題目連結:Partitioning by Palindromes UVA - 11584 題意:輸入一個有小寫字母組成的字串,你的任務是將它劃分成儘量少的迴文串 思路:dp[i]代表到第i位的最小值,列舉它的前幾位求出最小值,為了方便列舉整個長度我們 從str[1
ZZULIOJ 1106: 迴文數(函式專題)
題目描述 一個正整數,如果從左向 右讀(稱之為正序數)和從右向左讀(稱之為倒序數)是一樣的,這樣的數就叫回文數。輸入兩個整數m和n(m<n),輸出區間[m,n]之間的迴文數。 輸入 輸入兩個正整數m和n,輸入保證m<n。 &n
【LeetCode題解】9_迴文數(Palindrome-Number)
9_迴文數(Palindrome-Number) 文章目錄 9_迴文數(Palindrome-Number) 描述 解法一:轉化為字串的比較 思路 Java 實現 Python 實現 複雜
【LeetCode】125. 驗證迴文串(Valid Palindrome)
【 英文練習 | 中文練習 】 題目描述: 給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,忽略字母的大小寫。 解題思路: 用雙指標的思想,從字串的頭部與尾部向中間移動比較。 public boolean isPalindrome(String s) { if
1079 延遲的迴文數 (20 分)
1079 延遲的迴文數 (20 分) 給定一個 k+1 位的正整數 N,寫成 ak⋯a1a0 的形式,其中對所有 i 有 0≤ai<10 且 a
PAT乙級 1079 延遲的迴文數 (20 分)
給定一個 k+1 位的正整數 N,寫成 ak⋯a1a0的形式,其中對所有 i 有 0≤ai<10 且 ak>0。N 被稱為一個迴文數,當且僅當對所有 i 有 ai=ak-i。零也被定義為一個迴文數。 非迴文數也可以通過一系列操作變出迴文數。首先將該數字逆轉,再將逆轉數與該數相
Prime Palindromes 迴文質數(暴力構造)
Description 因為151即是一個質數又是一個迴文數(從左到右和從右到左是看一樣的),所以 151 號是迴文質數。 寫一個程式來找出範圍[a,b](5 <= a < b <= 100,000,000)間的所有迴文質數; Input 第 1 行:
LeetCode : 866. 迴文素數(Prime Palindrome)分析和解答
866. 迴文素數 求出大於或等於 N 的最小回文素數。 回顧一下,如果一個數大於 1,且其因數只有 1 和它自身,那麼這個數是素數。 例如,2,3,5,7,11 以及 13 是素數。 回顧一下,如果一個數從左往右讀與從右往左讀是一樣的,那麼這個數是迴文數。 例