回文字串

2021-06-16 23:56:07 字數 1297 閱讀 1946

還是在龐果網

看到的題目,這次選了個簡單的,回文字串。

題目內容

回文字串是指從左到右和從右到左相同的字串,現給定乙個僅由小寫字母組成的字串,你可以把它的字母重新排列,以形成不同的回文字串。

思路

不滿足上面條件的直接返回0,因為這樣構不成回文

判斷出能形成回文以後,將元素減半,在字串一半的長度內進行組合操作,即排列組合中的cmn,n表示某個元素的個數,m表示字串的剩餘長度。

比如例子中,判斷完以後還剩a和b兩個元素,每個元素個數都是1,字串長度為2,那回文數的個數是:c(2,1)*c(1,1)這是乙個標準組合和乘法法則

計算cmn的時候會出現極大的數,造成溢位,所以要實現大資料的加減乘除,這樣的**網上大把的,理解以後加入就行了,實際上就是用字串表示加減乘除。

完成以上三點,就完成題目了,這次提交後終於挑戰成功了。。。。

#include #include #include #include #include #include using namespace std;

//計算某個字元的個數,每次都是計算首字元的個數,計算完後將該字元從字串中清除

int howmany(string &str)

if(str.size()==0)

return 0;

string::iterator it;

char cmp=str[0];

int count=0;

for(int i=0;icom;

vector::iterator it;

for(int i=1;i=(n-m))

com.push_back(i); }

//cout << "combination "<< m <<" " << n << " is ";

res=divide(divide(fib(n),fib(m),0),fib(n-m),0);

//cout << res << endl;

return res; }

//入口函式

int palindrome(const string &s)

else

}else

}while(count!=0);

if(flag == 1 || flag ==0 )

else

{ cout << "no palindrome string" <

四則運算和取模的字串操作沒貼了,有點多而且不是演算法核心,而且網上一大把,我也是網上找的,就不貼了。

回文字串

描述 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在 要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。輸入第一行給出整數n 0思路分析 1.判斷字串前後倆個字元...

回文字串

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文...

回文字串

given a string,determine if it is a palindrome,considering only alphanumeric characters and ignoring cases.for example,a man,a plan,a canal panama is ...