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 };