当前位置: 首页 > 知识库问答 >
问题:

如何在字符矩阵中找到字符串路径?

彭浩穰
2023-03-14

共有1个答案

凌炜
2023-03-14

编辑:添加一个缓慢的半Java半伪代码版本

class Pair {
    public Pair(int x, int y) { this.x = x; this.y = y; }
    public int x;
    public int y;
};

class Main {
    static Vector<Pair> singleton(Pair p) {
        Vector<Pair> v = new Vector<Pair>();
        v.insert(p);
        return v;
    }

    static void f(String str, int [][]matrix, int width, int height) {
        Vector<Vector<Pair>> v = new Vector<Vector<Pair>>();
        for (int i = 0; i < height; ++i)
            for (int j = 0; j < width; ++j)
                try(i, j, str, matrix, width, height, v);
    }

    static void try(int i, int j, String str, int [][]matrix, int width, int height, Vector<Vector<Pair>> v) {
        int old_v_size = v.length;
        if (i < 0 || i >= height || j < 0 || j >= width) return;
        if (str.length == 1) v.insert(singleton(new Pair(i,j));
        try(i+1,j,str.substr(1),matrix,width,height,v);
        try(i-1,j,str.substr(1),matrix,width,height,v);
        try(i,j+1,str.substr(1),matrix,width,height,v);
        try(i,j-1,str.substr(1),matrix,width,height,v);
        for (int k = old_v_size; k < v.length; ++k) v[k].insert(new Pair(i,j));
    }

}

旧代码如下:

下面是Haskell中的一个解决方案(我在这里用一个函数替换矩阵,该函数获取两个整数并返回矩阵中的值)。函数f接受字符串、矩阵函数、宽度和高度,并为每个可能的解决方案返回元组列表。

f str matrix width height =
    concat [try i j str matrix width height | i <- [0..width-1], j <- [0..height-1] ]  


try i j (c:cs) matrix width height | i < 0 || 
                                     i >= height || 
                                     j < 0 || 
                                     j >= width || 
                                     matrix i j /= c = []
try i j [c] matrix width height = [(i,j)]
try i j (c:cs) matrix width height =
    concat  [map ((i,j):) $ try (i+1) j cs matrix width height,
             map ((i,j):) $ try (i-1) j cs matrix width height,
             map (c:) $ try i (j+1) cs matrix width height,
             map (c:) $ try i (j-1) cs matrix width height]
 类似资料:
  • 我能想到的唯一方法是一个回溯算法,它搜索这个词是否可能。有没有其他更快的算法来解决这个问题? 假设我有很多查询(关于查找一个单词是否存在)。那么是否可以做一些预处理来更快地回答查询呢?

  • 问题内容: 如何检查字符串是否包含空格字符,空格或“”。如果可能,请提供一个Java示例。 例如: 问题答案: 要检查字符串是否 包含空格,请 使用并调用它的find方法。 如果要检查它是否 仅包含空格, 则可以使用:

  • 问题内容: 我正在寻找一种在字符串中查找JSON数据的方法。像wordpress简码一样思考它。我认为最好的方法是使用正则表达式。我不想解析JSON,只需查找所有出现的事件。 正则表达式中是否有办法使括号的数量匹配?目前,当我嵌套对象时遇到了这个问题。 演示的快速示例: 结果,我想要两个JSON字符串。谢谢! 问题答案: 从给定的文本中提取JSON字符串 由于您正在寻找一种简单的解决方案,因此可以

  • 问题内容: 我正在使用BASH,但我不知道如何查找子字符串。它一直失败,我有一个字符串(应该是数组吗?) 下面是数据库名称的字符串列表,是答复(这些数据库之一)。以下内容仍然无效: 我也尝试过此方法,但不起作用: 问题答案: LIST=”some string with a substring you want to match” SOURCE=”substring” if echo “$LIST

  • 我试图从一个zip字符串生成一个数据矩阵,使用Java中的Zstar,结果是java.lang.IllegalArgumentException:消息包含ISO-8859-1编码之外的字符。 代码为: 我正在寻找任何解决方案来用这些特殊字符编码ZIP文件,而不一定用Zxing。