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 }
  • 相关阅读:
    libubox组件(1)——usock
    linux 块设备驱动(五)——块设备应用层的操作
    linux 块设备驱动(四)——简单的sbull实例
    linux 块设备驱动 (三)块设备驱动开发
    linux 块设备驱动(二)——块设备数据结构
    CUDA:零拷贝主机内存
    《无法触碰》
    CUDA: 流
    CUDA: 原子操作
    CUDA:纹理内存
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5094103.html
Copyright © 2011-2022 走看看