【问题标题】:Multiply multiple strings将多个字符串相乘
【发布时间】:2019-04-14 12:13:46
【问题描述】:

我遇到了这个问题:

给定

{1, 2, 3}{a, b} 

转换成

1a, 1b, 2a, 2b, 3a, 3b

可以有任意数量的花括号。输入将采用 List> 或多维数组的形式。 我只能想到有多个 for 循环并将字符串相乘。

有人可以更好地帮助我解决问题吗?

我尝试使用 {} 为每个字符串设置多个循环,但如果我们有更多的花括号,这不是一个好的解决方案

【问题讨论】:

  • 向我们展示你到目前为止得到了什么
  • 输入是字符串还是数组??如果是数组,那么它是多维的还是2个独立的数组???
  • @sanjeev51:它说:给定一个字符串
  • @sanjeev51,我们可以使用 List> 来简化编码

标签: java string algorithm data-structures


【解决方案1】:

这个怎么样。

  • 首先将输入 ("{1,2,3}{a,b}{X,Y}") 转换为 "1,2,3}{a,b}{X,Y"
  • 然后将其转换为String[]["1,2,3","a,b","X,Y"]
  • 最后,将其转换为List{["1","2","3"],["a","b"],["X","Y"]}

接下来要做的是将前两个元素相乘并将相乘的结果添加到列表的末尾。你继续这样做,直到只剩下一个元素:最终结果。所以:

  • {["1","2","3"],["a","b"],["X","Y"]} 变为 {["X", "Y"],["1a", "1b", "2a", "2b", "3a", "3c"]}
  • {["X", "Y"],["1a", "1b", "2a", "2b", "3a", "3c"]} 变为 {["X1a", "X1b", "X2a", "X2b", "X3a", "X3b", "Y1a", "Y1b", "Y2a", "Y2b", "Y3a", "Y3b"]}

    public static void main(String[] args) {
        String input = "{1,2,3}{a,b}{X,Y}";
        System.out.println(multiplyAll(input));
    }
    
    public static String multiplyAll(String input) {
        String[] parts = input.substring(1, input.length() - 1).split("\\}\\{");
        List<String[]> elements = new ArrayList<>();
        for (String part: parts) {
            elements.add(part.split(","));
        }
        while (elements.size() > 1) {
            String[] parts1 = elements.remove(0);
            String[] parts2 = elements.remove(0);
            elements.add(multiply(parts1, parts2));
        }
        String result = "";
        for (String element: elements.get(0)) {
            result += element + ",";
        }
        return result.substring(0, result.length() - 1);
    }
    
    public static String[] multiply(String[] parts1, String[] parts2) {
        String[] result = new String[parts1.length * parts2.length];
        for (int i = 0; i < parts1.length; i++) {
            for (int j = 0; j < parts2.length; j++) {
                result[i * parts2.length + j] = parts1[i] + parts2[j];
            }
        }
        return result;
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2022-06-22
    • 1970-01-01
    相关资源
    最近更新 更多