zoukankan      html  css  js  c++  java
  • Leetcode: 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:
    Given ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]
    Return 16
    The two words can be "abcw", "xtfn".
    
    Example 2:
    Given ["a", "ab", "abc", "d", "cd", "bcd", "abcd"]
    Return 4
    The two words can be "ab", "cd".
    
    Example 3:
    Given ["a", "aa", "aaa", "aaaa"]
    Return 0
    No such pair of words.

    想到String的char 查重,最好的方法就是用bit manipulation

    注意O(N^2)的iteration里面可以适当pruning

     1 public class Solution {
     2     public int maxProduct(String[] words) {
     3         if (words==null || words.length==0) return 0;
     4         int max = 0;
     5         int[] bitmasks = new int[words.length]; 
     6         Arrays.sort(words, new Comparator<String>(){
     7             public int compare(String s1, String s2) {
     8                 return s2.length()-s1.length();
     9             }
    10         });
    11         
    12         for (int i=0; i<words.length; i++) {
    13             for (int j=0; j<words[i].length(); j++) {
    14                 bitmasks[i] |= 1<<((int)(words[i].charAt(j) - 'a'));
    15             }
    16         }
    17         
    18         for (int i=0; i<words.length-1; i++) {
    19             for (int j=i+1; j<words.length; j++) {
    20                 if (words[i].length() * words[j].length() <= max) break; //pruning
    21                 if ((bitmasks[i] & bitmasks[j]) != 0) continue;
    22                 max = words[i].length() * words[j].length();
    23                 break;//pruning
    24             }
    25         }
    26         return max;
    27     }
    28 }
  • 相关阅读:
    Qt 学习之路:元素布局
    Qt 学习之路 2(80):定位器
    Qt 学习之路 2(79):QML 组件
    Qt 学习之路:QML 组件
    Qt 学习之路:QML 基本元素
    qt 学习之路 :QML 语法
    Qt 学习之路:QML 和 QtQuick 2
    Qt 学习之路:线程总结
    Qt 学习之路:线程和 QObject
    五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5094103.html
Copyright © 2011-2022 走看看