求多个字符串序列的交集

Posted samp000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求多个字符串序列的交集相关的知识,希望对你有一定的参考价值。

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

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.实际项目中,单个字符串序列没有重复字符串,因此没有考虑该问题。

以上是关于求多个字符串序列的交集的主要内容,如果未能解决你的问题,请参考以下文章

在java中怎样求多个arraylist集合的交集?

php 多个多维数组求交集

leetcode打卡——299. 猜数字游戏(求交集or标记法)

Mysql怎样求对同一个表的多个查询的交集

参数筛选查询——多表求交集(INTERSECT)+WITH AS

JAVA求字符串数组交集并集和差集