最长回文子串---Manacher算法
来源:互联网 发布:米兰达·可儿身材知乎 编辑:程序博客网 时间:2024/06/15 16:37
其实我根本不知道我写的对不对,因为我这个在Leetcode上跑的时间好像比较慢....
学习资料转自此处。
下面是自己写的代码(丑到死)
string longestPalindrome(string s){ int rad[2005]; for(int i = 0 ; i < 2005 ; i++) rad[i] = 0; string str; str.clear(); str.push_back('#'); for(int i = 0 ; i < s.size() ; i++){ str.push_back(s.at(i)); str.push_back('#'); } rad[1] = 1; int MaxRight = 2; int pos = 1; for(int i = 2 ; i < str.size() ; i++){ //cout << str.at(i) << endl; if(i >= MaxRight){ int j = 1; int temp = str.size() - i - 1; for( ; j <= min(temp , i) ; j++){ if(str.at(i+j) != str.at(i-j)){ j--; break; } } j = min(min(temp , i) , j); //这里最后J的值有点问题。如果加到边界会多一。 MaxRight = i + j; rad[i] = j; pos = i; if(MaxRight == str.size() - 1) break; //cout << "randge = " << min(temp , i) << endl; //cout << "j = " << j << endl; } else{ int ki = pos - (i - pos); int LM = pos - (MaxRight - pos); int j = min(ki - LM , rad[ki]) + 1; int temp = str.size() - i - 1; for( ; j < min(temp , i) ; j++){ if(str.at(i+j) != str.at(i-j)){ j--; break; } } if(i+j > MaxRight){ MaxRight = i+j; pos = i; } rad[i] = j; if(MaxRight == str.size() - 1) break; } } int max_rad = -1; for(int i = 0 ; i < str.size() ; i++){ if(rad[i] > max_rad){ max_rad = rad[i]; pos = i; } }//debug: /*cout << "rad : \n"; for(int i = 0 ; i < str.size() ; i++){ cout << str.at(i) << " "; } cout << endl; for(int i = 0 ; i < str.size() ; i++){ cout << rad[i] << " "; } cout << endl;*///debug if(str.at(pos) != '#') pos = (pos + 1) / 2 - 1 - (max_rad - 1) / 2; else pos = pos / 2 - 1 - (max_rad - 2) / 2; str = s.substr(pos , max_rad); return str;}
阅读全文
0 0
- Manacher算法求最长回文子串
- Manacher算法求最长回文子串
- 最长回文子串(Manacher算法)
- Manacher算法 最长回文子串
- 最长回文子串的manacher算法
- 最长回文子串,Manacher算法
- Poj3974 最长回文子串 Manacher算法
- 最长回文子串 manacher算法
- Manacher算法(最长子回文串)
- hihocoder1032(最长回文子串manacher算法)
- HDU3068(最长回文子串manacher算法)
- 最长回文子串 用manacher算法
- hiho1032 : 最长回文子串 Manacher算法
- 最长回文子串 - Manacher算法
- 最长回文子串Manacher算法
- Manacher算法 - 最长回文子串
- manacher算法-最长子回文串
- 最长回文子串-Manacher算法
- 记一次不会写的东西
- 相机标定原理
- Ibatis+JDBC+Mysql数据库访问
- 在前端开发中,Apache的下载和代理配置
- PostgreSQL psql 终端命令
- 最长回文子串---Manacher算法
- C#泛型方法的反射
- WEB基础
- WUST OJ 1590: As Many Princesses as Possible(树形DP)
- c#中动态编译wsdl并调用接口
- 混合运算与类型转换规律
- 第3章:微服务治理
- JAVA面试题------根据所给格式将字符串中单词倒置
- 作业