318_最大单词长度乘积_2021.11.17

给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。

 

 

今天没看官方解释,直接上我的暴力法,这里特别特别C++ STL的源码师傅们,这个string 里的find_first_of函数无敌,虽然内存拉满,但是直接就破解了这一题。

find_fisrt_of功能:查找在字符串中第一个与指定字符串中的某个字符匹配的字符,返回它的位置。

虽然有悖于该题题解所需要我们了解的位运算,但是能学习到这个函数还是对未来的很多业务功能很有用的:

 1 struct myCompareWord
 2 {
 3     bool operator()(const string& s1, const string& s2) const {
 4 
 5         return s1.length() > s2.length();
 6     }
 7 };
 8 
 9 
10 class Solution {
11 public:
12     int maxProduct(vector<string>& words) {
13 
14         int result = 0;
15 
16         //sort(words.begin(), words.end(), myCompareWord());
17 
18         int maxLen = 0;
19 
20         for (int i = 0; i < words.size(); i++)
21         {
22             string tmpStr1 = words[i];
23 
24 
25             int max2len = 0;
26             for (int j = i+1; j < words.size(); j++)
27             {
28                 string tmpStr2 = words[j];
29 
30                 if (tmpStr1.find_first_of(tmpStr2) == string::npos) {
31                     max2len = tmpStr2.length() > max2len ? tmpStr2.length() : max2len;
32                 }
33             }
34 
35             if (max2len)
36             {
37                 maxLen = tmpStr1.length();
38             }
39 
40             result = (maxLen * max2len) > result ? (maxLen * max2len) : result;
41         }
42 
43 
44 
45         return result;
46     }
47 };

 

posted @ 2021-11-17 21:07  炫迈吃到爽  阅读(36)  评论(0编辑  收藏  举报