zoukankan      html  css  js  c++  java
  • [leetcode] 97. 交错字符串

    97. 交错字符串

    题不难,dfs加回溯即可。实际上就是暴力搜索,穷举所有选择路径。

    以s3的每一个字母做一个状态,就面临两个抉择,选s1还是选s2。选s1路不通的话,回溯回来改选s2即可。

    class Solution {
        // 状态:String s1, String s2, String s3, int p, int q, int i
        // p为当前s1的下标指针,q为当前s2的下标指针,i为s3的
        boolean dfs(String s1, String s2, String s3, int p, int q, int i) {
            if (i >= s3.length()) {
                return p >= s1.length() && q >= s2.length();
            }
            char ch = s3.charAt(i);
            if (p < s1.length() && ch == s1.charAt(p)) {
                if (!dfs(s1, s2, s3, p + 1, q, i + 1)) {
                    if (q < s2.length() && ch == s2.charAt(q)) {
                        return dfs(s1, s2, s3, p, q + 1, i + 1);
                    }
                } else {
                    return true;
                }
            } else if (q < s2.length() && ch == s2.charAt(q)) {
                return dfs(s1, s2, s3, p, q + 1, i + 1);
            }
            return false;
        }
    
        public boolean isInterleave(String s1, String s2, String s3) {
            if (s1.length()+s2.length() != s3.length()) return false;
            return dfs(s1, s2, s3, 0, 0, 0);
        }
    }
    
  • 相关阅读:
    将博客搬至CSDN
    NOIP2018酱油记
    CF 1039D You Are Given a Tree && CF1059E Split the Tree 的贪心解法
    最大异或子序列问题
    UVa 10615
    UVa 1057
    用树状数组代替平衡树
    [CTSC2008]图腾totem
    POI2008 题解
    简便思路的题目别人的做法
  • 原文地址:https://www.cnblogs.com/acbingo/p/9906438.html
Copyright © 2011-2022 走看看