【数组】【打卡85天】leetCode每日一题:318. 最大单词长度乘积

1、题目描述

给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。

【数组】【打卡85天】leetCode每日一题:318. 最大单词长度乘积_第1张图片

2、算法分析

知识补充:

        判断一个字符串是否包含另一个字符串的字符,使用indexOf(),先看下源码

   public int indexOf(String str) {
        return indexOf(str, 0);
    }
1、描述
java.lang.String.indexOf() 的用途是在一个字符串中寻找一个字的位置,同时也可以判断一个字符串中是否包含某个字符。

2、声明
int indexOf(int ch,int fromIndex)  

3、返回值
indexOf的返回值为int

4、案例
public static void main(String[] args) {  
    String str1 = "abcdefg";  
    int result1 = str1.indexOf("a");  
    if(result1 != -1){  
        System.out.println("字符串str中包含子串“a”"+result1);  
    }else{  
        System.out.println("字符串str中不包含子串“a”"+result1);  
    }  
}

简单的就是暴力解法。

遍历每一个单词,两两比较单词是否存在相同字符。 

3、代码实现

import java.util.*;
class Solution {
    public int maxProduct(String[] words) {
        int res = 0;
        // 遍历每一个单词
        for(int i = 0;i < words.length;i++){
            // 记录下第一个单词
            String word1 = words[i];
            // 遍历每一个单词
            for(int j = i+1;j < words.length;j++){
                String word2 = words[j];
                // 比较两个单词是否有相同字符
                if(!hasSame(word1,word2)){
                    res = Math.max(res,word1.length()*word2.length());
                }
            }
        }
        return res;
    }

    public boolean hasSame(String word1,String word2){
        // 看word1中是否包含word2的字符
        for(char c: word1.toCharArray()){
            if(word2.indexOf(c) != -1){
                return true;
            }
        }
        return false;
    }
}

你可能感兴趣的:(【算法】,mysql,数据库,database)