LeetCode—318 Maximum Product of Word Lengths

思路:处理一下这些strs,排除掉重复的,建立二重map,第一个以字母作为key,对应的value是另外一个map,这个map的key是该单词的序列号。

Map<字符,Map<字符串的序列,标识符>>


GitHub地址:https://github.com/corpsepiges/leetcode

Java版本和Python版本,求star。


	Map<Character,Map<Integer,Integer>> map=new HashMap<Character, Map<Integer,Integer>>();
	//装初始字符串数组
	String[] initStrs=null;
	//装处理过的字符串数组
	String[] nowStrs=null;
    public int maxProduct(String[] words) {
    	int length=words.length;
    	if (length<2) {
			return 0;
		}
    	initStrs=words;
    	nowStrs=new String[length];
    	Map<String,Integer> cond=null;
    	StringBuffer sb=null;
    	//对原数组进行处理,保证处理后的字符串中没有重复字母,缩减判断时间
    	for (int i = 0; i < length; i++) {
    		cond=new HashMap<String, Integer>();
    		sb=new StringBuffer();
    		for (int j = 0; j < words[i].length(); j++) {
    			String k=words[i].substring(j,j+1);
				if (cond.get(k)==null) {
					sb.append(k);
					cond.put(k,1);
				}
			}
    		nowStrs[i]=sb.toString();
		}
    	//遍历原有数组,按字符写进map
    	for (int i = 0; i < length; i++) {
			char[] cs=nowStrs[i].toCharArray();
			for (int j = 0; j < cs.length; j++) {
				if (map.get(cs[j])==null) {
					Map<Integer,Integer> m=new HashMap<Integer, Integer>();
					m.put(i, 1);
					map.put(cs[j], m);
				}else {
					map.get(cs[j]).put(i, 1);
				}
			}
		}
    	int max=0;
    	for (int i = 0; i < length; i++) {
			for (int j = i+1; j < length; j++) {
				int test=f(i,j);
				if (test>max) {
					max=test;
				}
			}
		}
    	return max;
    }
    public int f(int i,int j){
    	char[] csi=nowStrs[i].toCharArray();
    	//选择一个字符串开始读取,如果该字符串包含的任意一个另外字符串拥有的字符,则返回0
    	for (int k = 0; k < csi.length; k++) {
			if (map.get(csi[k]).get(j)!=null) {
				return 0;
			}
		}
    	return initStrs[i].length()*initStrs[j].length();
    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值