题解 | #字符串长度最大乘积#

字符串长度最大乘积

http://www.nowcoder.com/practice/480caa5ffd164ac8b71caaa6d0f4e6db

解题思路

  1. 先提取输入的字符串数组
  2. 用类似冒泡方式遍历并判断两个字符串是否有重复
  3. 满足要求就计算乘积并保留最大乘积

法一

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        
        // 提取完整的字符串
        str = str.substring(1, str.length() - 1);  // 去掉输入的'[' 和 ']'字符
        String[] strs = str.split(",");  // 先根据 ',' 来简单筛选字符数组中的字符串
        for (int i = 0; i < strs.length; i++) {
            if (strs[i].length() == 0) {
                continue;
            }
            // 去掉简单筛选的头尾,即 " 和 ",得到完整的字符串
            strs[i] = strs[i].substring(1, strs[i].length() - 1);
        }
        
        int max = 0;  // 记录不重复字符串的长度乘积
        HashSet<Character> set = new HashSet<>();  // 存储一个字符串的每个字符
        
        // 控制字符串和后面的比较,在依次递进
        for (int i = 0;i < strs.length; i++) {
            // 控制第 j 个字符串和后面的比较
            for (int j = i + 1; j < strs.length; j++) {
                int index = 0;  // 主要用户记录该字符串索引到的位置
                
                // 将字符串的字符一个个存入set中当作key
                for (; index < strs[i].length(); index++) {
                    set.add(strs[i].charAt(index));
                }
                
                // 如果有重复的就退出,进而index != strs[j].length()
                for (index = 0;index < strs[j].length(); index++) {
                    if (set.contains(strs[j].charAt(index))) {
                        break;
                    }
                }
                
                // 判断前面的for是否有退出
                if (index == strs[j].length()) {
                    int temp = strs[i].length() * strs[j].length();
                    if (temp > max) {
                        max = temp;
                    }
                }
                
                set.clone();  // 清除set内容,为下一个字符串准备
            }
        }
        System.out.println(max);
    }
}

法二(相对法一:没有使用HashSet而是直接使用字符串进行对比)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        
        // 提取完整的字符串
        str = str.substring(1, str.length() - 1);  // 去掉输入的'[' 和 ']'字符
        String[] strs = str.split(",");  // 先根据 ',' 来简单筛选字符数组中的字符串
        for (int i = 0; i < strs.length; i++) {
            if (strs[i].length() == 0) {
                continue;
            }
            // 去掉简单筛选的头尾,即 " 和 ",得到完整的字符串
            strs[i] = strs[i].substring(1, strs[i].length() - 1);
        }
        
        int max = 0;  // 记录不重复字符串的长度乘积
        
        // 控制字符串和后面的比较,在依次递进
        for (int i = 0;i < strs.length; i++) {
            // 控制第 j 个字符串和后面的比较
            for (int j = i + 1; j < strs.length; j++) {
                int index = 0;  // 主要用户记录该字符串索引到的位置
                
               // 如果有重复的就退出,进而index != strs[j].length()
               for (;index < strs[j].length(); index++) {
                   if (strs[i].contains(strs[j].substring(index, index + 1))) {
                       break;
                   }
               }
                
                // 判断前面的for是否有退出
                if (index == strs[j].length()) {
                    int temp = strs[i].length() * strs[j].length();
                    if (temp > max) {
                        max = temp;
                    }
                }
            }
        }
        System.out.println(max);
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务