2022-7-18 剑指offer-位运算
给定一个字符串数组 words
,请计算当两个字符串 words[i]
和 words[j]
不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。
class Solution { public int maxProduct(String[] words) { int n=words.length; int[] mask=new int[n]; for (int i=0;i<n;i++){ String word=words[i]; for (int j=0;j<word.length();j++){ char c=word.charAt(j); mask[i]|=1<<(c-'a'); //System.out.println(1<<(c-'a')); //System.out.println(mask[i]); } } int ans=0; for (int i=0;i<n;i++){ for (int j=i+1;j<n;j++){ if ((mask[i]&mask[j])==0) ans=Math.max(ans,words[i].length()*words[j].length()); } } return ans; } }
思路:利用位运算标记是否有字母,再遍历寻找最大值。