首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最长回文子字符串《C++帮助》

最长回文子字符串《C++帮助》
EN

Stack Overflow用户
提问于 2020-06-15 06:23:08
回答 1查看 112关注 0票数 1

我在打印最长的回文子字符串的输出时遇到了问题,并且还没有弄清楚。如果输入的是一个回文字符串,我的代码会打印出一个回文字符串,但不能打印出回文子字符串。这段代码的else函数有问题,我想知道bug在哪里:

代码语言:javascript
复制
string longestSubstring(string str){

    int size = str.size();
    string newStr = "";

    if(str[0] == str[size - 1]){
        for(int i = size - 1;i >= 0;i--){
            newStr += str[i];
        }
        if(str == newStr){
            return newStr;
        }
    }

    else{
        for(int j = 0; j < size - 1; j++){
            for(int k = size - 1; k > 0; k--){
                if(str[j] == str[k] && k != j){
                    for(int i = size - 1;i > 0;i--){
                        newStr += str[i];
                    }
                }
                k = 0;
                j = size;
            }
        }
    }
    return newStr;
}

int main() {
    string palindromeStr;

    cout << longestSubstring(palindromeStr);  
    return 0;
}

提前感谢所有能提供帮助的人

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-15 06:54:22

问题出现在最里面的循环中。

代码语言:javascript
复制
for(int j = 0; j < size - 1; j++){
    for(int k = size - 1; k > 0; k--){
        if(str[j] == str[k] && k != j){
            for(int i = size - 1;i > 0;i--){
                newStr += str[i];
            }
        }
        k = 0;
        j = size;
    }
}

我认为您正在尝试将子字符串的每个字符与另一边的字符进行比较。这种方法是正确的,如果正确实现,将会起作用。

但是,循环只比较字符串最左端和最右端的字符(strk和strj),这意味着它几乎总是忽略字符串中的大多数字符。

下面是我的代码,它实现了这种方法:

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
#include <vector>

using namespace std;

bool isPalindrome(string str){
    for(int i = 0; i <= str.size()/2; ++i){
        if(str[i] != str[str.size()-1-i]){return false;}
    }
    return true;
}

string longestSubstring(string str){
    int len = str.size();
    for(int size = len; size >= 1; --size){ // test every possible size
        for(int start = 0; start < len-size; ++start){
            if(isPalindrome(str.substr(start, size))){
                return str.substr(start, size);
            }
        }
    }

    return "";
}

int main() {
    string palindromeStr;
    cin >> palindromeStr;

    cout << longestSubstring(palindromeStr);  
    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62378903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档