挑戰面試程式設計 回文串 回文數字

2021-09-07 10:59:29 字數 1467 閱讀 2250

挑戰面試程式設計:回文串、回文數字

回文(palindrome)問題是乙個非經常見的問題。回文現象是指從左到右和從右到左閱讀是一樣的串或數字。

比如串:"abcba"、數字:121。

一、從首尾向中間遞進

**例如以下

/*

驗證串的回文問題

s是字串,n是串的長度

驗證方向:從首尾向中間遞進

*/bool palindromic(const char *s, int n)

return true;

}

二、從中間向首尾遞進

**例如以下

/*

驗證串的回文問題

s是字串。n是串的長度

驗證方向:從中間向首尾遞進

*/bool palindromic(const char *s, int n)

else

while (i >= 0)

return true;

}

複雜度分析

由於最多僅僅需遍歷一次串,所以以上兩種方法的時間複雜度都是o(n)。僅僅使用到了兩個int型的變數充當指標。故空間複雜度都是o(1)。

對於數字的回文問題。怎樣推斷呢?是否能先把數字轉化為串,如此就能夠利用上面已寫好的方法。**就簡單了:

char s[11];

palindromic(itoa(n, s, 10));

使用到了庫函式char * itoa(int value, const char *s, int radix);

庫函式itoa()(integer to ascii)會把int型的數字value

按進製radix轉換為字串,並在字串末尾加入乙個串的結束符'\0'。

故這裡的palindromic()僅僅需乙個引數,串的長度能夠在函式內部通過strlen(s)獲得。

同一時候,ing型的資料最多僅僅有10位,加上串結束符,總共不會超過11位,故字串陣列s設定為11位的。對上面串的回文函式稍作改動。就可以對數字進行回文推斷。

假設把-121也當做回文。則需把上面的做法稍作改動。

使用itoa()對-121處理。會得到"-121",這個顯然不是回文串。

要想使推斷成功,則對於負數。需傳入-value。

itoa()函式的自我實現

char *i_itoa(int value, char *s, int radix)

//先把結果存入棧中

while (value)

while (!stack.empty())

//在結尾加上結束符'\0'

s[i] = '\0';

return s;

}

在使用itoa()函式的時候,傳入的字串陣列得足夠的大,否則極易越界。因此,itoa()是不安全的。

全部內容的資料夾

python 回文字串 回文數字

所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的。回文數字也是如此。python2 如下 def huiwen s s1 str s if s1 join reversed s1 return true else return false 執行結果 huiwen abccba true...

挑戰面試程式設計 字串替換

挑戰面試程式設計 字串替換 寫乙個字串替換函式,如母串 123123123123 把母串中的子串 123 替換為 12345 或者 12 思路 利用庫函式strstr 定位子串。使用strcpy 進行替換。不斷重複著定位和替換操作,直到定位到null為止。操作示意圖 開始新一輪的定位 示例 incl...

字串回文和數字回文判斷

1.字串回文判斷 所謂字串回文就是逆序後與原來字串相同,如 abccba 就是回文字串。使用遞迴求解,遞迴結束情景 1 如果字串長度是奇數,字串會剩下最中間那位字元,但其不影響回文。當檢查到長度為1的時候即代表此字串是回文 2 如果字串長度是偶數,當兩端的字串兩兩比較檢查後不會剩下字元。即檢查到長度...