求多个字符串序列的交集

这是实际开发中遇到的问题,留个纪念,以后优化。

mydialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>
#include <QStringList>

class MyDialog : public QDialog
{
    Q_OBJECT

public:
    MyDialog(QWidget *parent = nullptr);
    ~MyDialog();
    QStringList intersection(const QStringList &list1, const QStringList &list2);

};

#endif // MYDIALOG_H

mydialog.cpp

#include "mydialog.h"

MyDialog::MyDialog(QWidget *parent) : QDialog(parent)
{
    QStringList list1;
    list1 << "aaa" << "bbb" << "ccc";
    QStringList list2;
    list2 << "ccc" << "ddd" << "fff";

    QStringList result = intersection(list1, list2);

}

MyDialog::~MyDialog()
{

}

// 求字符串序列的交集
QStringList MyDialog::intersection(const QStringList &list1, const QStringList &list2)
{
    QStringList result;

    // 先判断参数的有效性
    if(list1.isEmpty() || list2.isEmpty())
    {
        return result;
    }

    // 求交集
    for(int i = 0; i < list1.size(); i++)
    {
        QString list1_str = list1.at(i);

        for(int j = 0; j < list2.size(); j++)
        {
            QString list2_str = list2.at(j);
            if(!list1_str.compare(list2_str))
            {
                result.append(list1_str);
            }
        }
    }

    return result;
}

main.cpp

#include "mydialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyDialog w;
    w.show();

    return a.exec();
}

效果展示

1.实际项目中,是多个字符串序列求交集,因此时间复杂度是n3;

2.实际项目中,单个字符串序列没有重复字符串,因此没有考虑该问题。

猜你喜欢

转载自www.cnblogs.com/samp000/p/12375137.html