qt最长回文子串代码,使用Manacher算法,需要创建qt窗口实现输入和输出
时间: 2024-02-19 19:58:20 浏览: 37
好的,下面是使用QT实现Manacher算法的代码,同时包括了QT窗口的输入和输出。
首先,我们需要在QT Creator中创建一个新的Qt Widgets项目,然后在mainwindow.cpp文件中添加下面的代码:
```
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(findLongestPalindrome()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::findLongestPalindrome()
{
QString str = ui->lineEdit->text();
QString result = longestPalindrome(str);
ui->label->setText(result);
}
QString MainWindow::longestPalindrome(QString s)
{
QString t = "$#";
for (int i = 0; i < s.length(); ++i) {
t += s.at(i);
t += "#";
}
int p[t.length()] = {0};
int mx = 0, id = 0, maxLength = 0, centerIndex = 0;
for (int i = 1; i < t.length(); ++i) {
p[i] = mx > i ? std::min(p[2 * id - i], mx - i) : 1;
while (t[i + p[i]] == t[i - p[i]]) {
++p[i];
}
if (mx < i + p[i]) {
mx = i + p[i];
id = i;
}
if (maxLength < p[i]) {
maxLength = p[i];
centerIndex = i;
}
}
QString res;
for (int i = centerIndex - maxLength + 1; i < centerIndex + maxLength; ++i) {
if (t[i] != '#') {
res += t[i];
}
}
return res;
}
```
在这段代码中,我们使用了QT的信号槽机制,将按钮的点击事件连接到了findLongestPalindrome()槽函数。该函数中,首先获取输入框中的字符串,然后调用longestPalindrome()函数来计算最长回文子串,最后将计算结果显示在label标签中。
longestPalindrome()函数实现了Manacher算法,对输入字符串进行预处理,并维护了变量p、mx、id、maxLength和centerIndex,最终返回最长回文子串。
下面是mainwindow.h文件的代码:
```
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
QString longestPalindrome(QString s);
public slots:
void findLongestPalindrome();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
```
最后,在mainwindow.ui文件中添加下面的控件:
- QLineEdit:用于输入字符串。
- QPushButton:用于触发计算最长回文子串的按钮。
- QLabel:用于显示计算结果。
然后,将这些控件与对应的槽函数和变量进行连接,就可以运行这个程序了。
注意:为了能够正常使用QString类和std::min函数,需要在mainwindow.cpp文件中添加下面两行代码:
```
#include <QString>
#include <algorithm>
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)