lintcode856. 句子相似性

给出两个句子words1和words2(每个用一个字符串数组表示),和一个相似词对数组pairs,你需要判断两个句子是否相似。

例如,如果相似词对是pairs = [[“great”, “fine”], [“acting”,“drama”], [“skills”,“talent”]],那么words1 = great acting skills和words2 = fine drama talent是相似的。

需要注意,相似关系是不可传递的。例如,如果"great"和"fine"相似,"fine"和"good"相似,"great"和"good"不是一定相似的。

然而,相似性是对称的。例如,"great"和"fine"相似,则"fine"和"great"也是相似的,这两者是等价的。

另外,一个单词永远与它本身相似。例如,句子words1 = [“great”], words2 = [“great”], pairs = []是相似的,尽管没有相似词对。

最后,两个句子只有在单词数相等的情况下才可能相似。所以,句子words1 = [“great”]永远不可能与句子words2 = [“doubleplus”,“good”]相似。

样例
样例1

输入: words1 = ["great","acting","skills"], words2 = ["fine","drama","talent"] and pairs = [["great","fine"],["drama","acting"],["skills","talent"]]
输出: true
解释:
"great""fine"相似
"acting""drama"相似
"skills""talent"相似
样例2

输入: words1 = ["fine","skills","acting"], words2 = ["fine","drama","talent"] and pairs = [["great","fine"],["drama","acting"],["skills","talent"]]
输出: false
解释:
"fine""fine"相同
"skills""drama"不相似
"acting""talent"不相似
注意事项
words1和words2的长度不会超过1000。
pairs的长度不会超过2000。
每一个pairs[i]的长度是2。
每一个words[i]和pairs[i][j]的长度在[1, 20]范围内。
class Solution {
public:
    /**
     * @param words1: a list of string
     * @param words2: a list of string
     * @param pairs: a list of string pairs
     * @return: return a boolean, denote whether two sentences are similar or not
     */
    bool isSentenceSimilarity(vector<string> &words1, vector<string> &words2, vector<vector<string>> &pairs) {
        // write your code here
        set<vector<string>> judge;
        for (auto pair : pairs) {
            /* code */
            judge.insert(pair);
        }
        for (int i = 0; i < words1.size(); i++) {
            /* code */
            vector<string>tmp1={words1[i],words2[i]};
            vector<string>tmp2={words2[i],words1[i]};
            if(!judge.count(tmp1)&&!judge.count(tmp2)&&words1[i]!=words2[i]) return false;
        }
        return true;
    }
};
发布了369 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43981315/article/details/103995129