zoukankan      html  css  js  c++  java
  • 318. Maximum Product of Word Lengths

    Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0.

    Example 1:

    Input: ["abcw","baz","foo","bar","xtfn","abcdef"]
    Output: 16 
    Explanation: The two words can be "abcw", "xtfn".

    Example 2:

    Input: ["a","ab","abc","d","cd","bcd","abcd"]
    Output: 4 
    Explanation: The two words can be "ab", "cd".

    Example 3:

    Input: ["a","aa","aaa","aaaa"]
    Output: 0 
    Explanation: No such pair of words.
    class Solution {
        public int maxProduct(String[] words) {
            int l = words.length;
            int res = 0;
            if(l == 0) return res;
            // if(l == 1) return 
            for(int i = 0; i < l - 1; i++){
                for(int j = i + 1; j <l; j++){
                    String t1 = words[i];
                    String t2 = words[j];
                    boolean t = true;
                    for(int m = 0; m < t1.length(); m++){
                        for(int n = 0; n < t2.length(); n++){
                            if(t1.charAt(m) == t2.charAt(n)){
                                t = false;
                                break;
                            }
                        }
                        if(t == false) break;
                        
                    }
                    if(t == true) res = Math.max(res, t1.length() * t2.length());
                }
            }
            return res;
        }
    }

    brute force

    public class Solution {
        public int maxProduct(String[] words) {
            final int n = words.length;
            final boolean[][] hashset = new boolean[n][26];
    
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < words[i].length(); ++j) {
                    hashset[i][words[i].charAt(j) - 'a'] = true;
                }
            }
    
            int result = 0;
            for (int i = 0; i < n-1; ++i) {
                for (int j = i + 1; j < n; ++j) {
                    boolean hasCommon = false;
                    for (int k = 0; k < 26; ++k) {
                        if (hashset[i][k] && hashset[j][k]) {
                            hasCommon = true;
                            break;
                        }
                    }
                    int tmp = words[i].length() * words[j].length();
                    if (!hasCommon && tmp > result) {
                        result = tmp;
                    }
                }
            }
            return result;
        }
        // private static final int ALPHABET_SIZE = 26;
    }
  • 相关阅读:
    HDU1698(线段树入门题)
    POJ2528(离散化+线段树区间更新)
    POJ3630(Trie树)
    HDU1251(字典树)
    HDU1247(经典字典树)
    POJ2513(字典树+图的连通性判断)
    POJ1363
    UVa11624(逃离火焰问题)
    HDOJ1495(倒水BFS)
    poj3414Pots(倒水BFS)
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11706504.html
Copyright © 2011-2022 走看看