1. 程式人生 > >[LeetCode] Sentence Similarity

[LeetCode] Sentence Similarity

first pre size each amp 特殊情況 ret nec isf

Given two sentences words1, words2 (each represented as an array of strings), and a list of similar word pairs pairs, determine if two sentences are similar.

For example, "great acting skills" and "fine drama talent" are similar, if the similar word pairs are pairs = [["great", "fine"], ["acting","drama"], ["skills","talent"]]

.

Note that the similarity relation is not transitive. For example, if "great" and "fine" are similar, and "fine" and "good" are similar, "great" and "good" are not necessarily similar.

However, similarity is symmetric. For example, "great" and "fine" being similar is the same as "fine" and "great" being similar.

Also, a word is always similar with itself. For example, the sentences words1 = ["great"], words2 = ["great"], pairs = [] are similar, even though there are no specified similar word pairs.

Finally, sentences can only be similar if they have the same number of words. So a sentence like words1 = ["great"]

can never be similar to words2 = ["doubleplus","good"].

Note:

  • The length of words1 and words2 will not exceed 1000.
  • The length of pairs will not exceed 2000.
  • The length of each pairs[i] will be 2.
  • The length of each words[i] and pairs[i][j] will be in the range [1, 20].

判斷句子相似性。
給定兩個字符串數組和一個由鍵值對組成的數組。
根據給定的規則判斷字符串數組對應的字符串是否相等。即鍵值對中的鍵值是否對應於字符串數組中的對應字符串。
首先先判斷邊界條件,三種特殊情況。
然後外層for循環遍歷字符串數組,設置標誌位,內層for循環判斷鍵值對中的字符是否與字符串數組中對應的字符串是否相等。其中還需要判斷兩個字符串相等的情況
每循環一次內層for前將標誌位置為false。如果內層for遍歷結束標誌位仍為false。則認為不相似返回false即可。
最後結束遍歷 後返回true。

class Solution {
public:
    bool areSentencesSimilar(vector<string>& words1, vector<string>& words2, vector<pair<string, string>> pairs) {
        if (words1.empty() || words2.empty())
            return true;
        if (pairs.empty())
            return true;
        if (words1.size() != words2.size())
            return false;
        
        bool isFind;
        for (int i = 0; i < words1.size(); i++) {
            isFind = false;
            for (int j = 0; j < pairs.size(); j++) {
                if (words1[i] == pairs[j].first && words2[i] == pairs[j].second)
                    isFind = true;
                if (words1[i] == pairs[j].second && words2[i] == pairs[j].first)
                    isFind = true;
                if (words1[i] == words2[i])
                    isFind = true;
            }
            if (!isFind)
                return false;
        }
        return true;
    }
};
// 6 ms

[LeetCode] Sentence Similarity