字符串中对称子串的最大长度
2014-10-13 21:54
225 查看
1. 描述
输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“goooogle”, 由于该字符串里最长的对称子字符串是“goooog”, 因此输出 6。
2. 思路
字符串中的每一个开始,向两边扩展,此时可分为两种情况:
(1)对称子串长度是奇数时, 以当前字符为对称轴向两边扩展比较
(2)对称子串长度是偶数时,以当前字符和它右边的字符为对称轴向两边扩展
时间复杂度O(n2);
3. 代码
输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“goooogle”, 由于该字符串里最长的对称子字符串是“goooog”, 因此输出 6。
2. 思路
字符串中的每一个开始,向两边扩展,此时可分为两种情况:
(1)对称子串长度是奇数时, 以当前字符为对称轴向两边扩展比较
(2)对称子串长度是偶数时,以当前字符和它右边的字符为对称轴向两边扩展
时间复杂度O(n2);
3. 代码
<pre name="code" class="cpp">#include <iostream> #include <string> using namespace std; int main() { string str; getline(cin,str); int i,j; int len = str.length(); int maxlen=0; int maxIndex=0; int tmpLen=0; int left,right; for (i=1;i<len;i++) { tmpLen = 1; //对称子串可能为奇数时 left = i-1; right = i+1; while(left>=0&&right<len) { if (str[left--] == str[right++]) { tmpLen += 2; }else{ break; } } if (tmpLen > maxlen) { maxlen = tmpLen; maxIndex =i; } tmpLen =0;//对称子串可能为偶数时 left = i; right = i+1; while(left>=0&&right<len) { if (str[left--] == str[right++]) { tmpLen += 2; }else{ break; } } if (tmpLen > maxlen) { maxlen = tmpLen; maxIndex =i; } } cout<<maxlen<<endl; }
相关文章推荐
- c语言输出字符串中最大对称子串长度的3种解决方案
- 输入一个字符串,输出该字符串中最大对称子串的长度
- 字符串中最大对称子串的长度(C++软件工程师面试题)
- c语言输出字符串中最大对称子串长度的3种解决方案
- 字符串中对称子串的最大长度
- 面试题:最长回文子串(即求对称字符串的最大长度 )
- 找出字符串中对称的子字符串的最大长度(最长回文)[No. 14]
- 对称字符串的最大长度
- 找出字符串中对称的子字符串的最大长度(最长回文)
- 找出字符串中对称的子字符串的最大长度(最长回文)
- 找出该字符串中对称的子字符串的最大长度
- 对称字符串的最大长度
- 计算一个字符串中最大的子串的长度,并将它返回。如“abc12345sdfsasdfsd”最大的子串是sdfsasdfsd
- 找出字符串中对称的子字符串的最大长度(最长回文)
- 输入一个字符串,输出该字符串中对称的子字符串的最大长度。
- 求对称字符串的最大长度
- 字符串中对称字符串的最大长度(最长回文)
- 获取最大长度存在巅倒字符串的子串
- 程序员面试100题之一:对称字符串的最大长度
- 程序员面试100题之一:对称字符串的最大长度