使用qt写一个能实现最长公共前缀的函数
时间: 2024-02-03 07:13:06 浏览: 26
可以使用以下方法实现:
```cpp
QString longestCommonPrefix(const QStringList &strList)
{
if (strList.isEmpty()) {
return QString();
}
QString prefix = strList.first();
for (const QString &str : strList) {
int i = 0;
while (i < prefix.length() && i < str.length() && prefix.at(i) == str.at(i)) {
i++;
}
prefix = prefix.left(i);
}
return prefix;
}
```
使用示例:
```cpp
QStringList strList = {"abcdefg", "abcdxyz", "abcd123"};
QString prefix = longestCommonPrefix(strList);
qDebug() << prefix; // 输出 "abcd"
```
该函数接收一个字符串列表 `strList`,返回所有字符串的最长公共前缀。如果列表为空,则返回空字符串。
相关问题
写一个qt使用线程跑一个函数
好的,我可以回答这个问题。您可以使用Qt的QThread类来创建一个线程,并在其中运行您的函数。首先,您需要创建一个继承自QThread的类,并在其中实现您的函数。然后,您可以在主线程中创建一个该类的实例,并调用start()函数来启动线程。在run()函数中,您可以调用您的函数来执行您的任务。记得在完成任务后,调用exit()函数来退出线程。
使用Manacher算法,写一个最长回文字串qt代码,创建界面实现输入输出
下面是一个基于 Qt 的最长回文子串的界面实现,包括输入输出和求解最长回文子串的代码:
mainwindow.h:
```cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QString manacher(QString s);
};
#endif // MAINWINDOW_H
```
mainwindow.cpp:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString s = ui->lineEdit->text();
if (s.isEmpty()) {
QMessageBox::warning(this, tr("错误"), tr("请输入字符串"));
return;
}
QString ans = manacher(s);
ui->textEdit->setText(ans);
}
QString MainWindow::manacher(QString s)
{
QString ss = "#";
for (int i = 0; i < s.length(); i++) {
ss += s[i];
ss += "#";
}
int len = ss.length();
int maxRight = 0, center = 0;
QVector<int> p(len, 0);
int maxLen = 0, start = 0;
for (int i = 0; i < len; i++) {
if (i < maxRight) {
p[i] = qMin(p[2 * center - i], maxRight - i);
}
else {
p[i] = 1;
}
while (i - p[i] >= 0 && i + p[i] < len && ss[i - p[i]] == ss[i + p[i]]) {
p[i]++;
}
if (i + p[i] > maxRight) {
maxRight = i + p[i];
center = i;
}
if (p[i] > maxLen) {
maxLen = p[i];
start = (i - maxLen) / 2;
}
}
return s.mid(start, maxLen - 1);
}
```
mainwindow.ui:
在 Qt Designer 中创建界面,添加一个 QLineEdit 和一个 QPushButton 和一个 QTextEdit,并将其分别命名为 lineEdit、pushButton 和 textEdit。
最后,将 pushButton 的 clicked 信号与 on_pushButton_clicked() 槽函数连接起来,并在 MainWindow 的构造函数中添加以下代码:`ui->textEdit->setReadOnly(true);`,以使 textEdit 只读。
这样,就完成了一个基于 Qt 的最长回文子串求解界面。
在界面中输入待求解的字符串,点击按钮,即可在 textEdit 中显示其最长回文子串。如果输入为空,则会弹出错误提示框。