一、题目

1、题目描述

给你一个下标从0开始的数组words,数组中包含互不相同的字符串。

如果字符串words[i]与字符串words[j]满足以下条件,我们称它们可以匹配:

  • 字符串words[i]等于words[j]的反转字符串。
  • 0 <= i < j < words.length

请你返回数组words中的最大匹配数目。

注意,每个字符串最多匹配一次。

2、接口描述

class Solution {public:int maximumNumberOfStringPairs(vector& words) {}};

3、原题链接

2744. 最大字符串配对数目


二、解题报告

1、思路分析

小写字母ASCII值最大也就一百多,所以任意一个长度为2的小写字母串给它映射到整数上存起来,一次遍历即可。

2、复杂度

时间复杂度:O(N) 空间复杂度:O(N)

3、代码详解

C++
class Solution {public:int maximumNumberOfStringPairs(vector& words) {int ret = 0;unordered_set hash;for(auto& x : words)hash.count(x[1] * 150 + x[0]) ? ++ret : (hash.insert(x[0] * 150 + x[1]) , 0);return ret; }};
​Python3
class Solution:def maximumNumberOfStringPairs(self, words: List[str]) -> int:return sum(1 for i , s in enumerate(words) if s[::-1] in words[i + 1 :])