[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);
    }
}

原文地址:https://www.cnblogs.com/acbingo/p/9906438.html

时间: 2024-10-11 00:42:59

[leetcode] 97. 交错字符串的相关文章

97. 交错字符串

题目描述: 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true示例 2: 输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false 思路: 设dp[i][j]表示

LeetCode:反转字符串中的元音字母【345】

LeetCode:反转字符串中的元音字母[345] 题目描述 编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leetcode" 输出: "leotcede" 说明:元音字母不包含字母"y". 题目分析 所谓的做题就是把以前背下来的拿过来改一下即可.双指针碰撞模型,之前已经描述过很多次了,此处不在赘述. 知道AEI

leetcode python翻转字符串里的单词

# Leetcode 151 翻转字符串里的单词### 题目描述给定一个字符串,逐个翻转字符串中的每个单词. **示例1:** 输入: "the sky is blue" 输出: "blue is sky the" **示例2:** 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括. **示例3:** 输入: "

leetCode 97.Interleaving String (交错字符串) 解题思路和方法

Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 = "aabcc", s2 = "dbbca", When s3 = "aadbbcbcac", return true. When s3 = "aadbbbaccc", return false. 思路:此题刚开始有点想当然了

LeetCode(97):交错字符串

Hard! 题目描述: 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" 输出: true 示例 2: 输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc" 输出: false 解题思路:

[LeetCode] Add Strings 字符串相加

Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. Note: The length of both num1 and num2 is < 5100. Both num1 and num2 contains only digits 0-9. Both num1 and num2 does not contain any leading zero.

交错字符串——动态规划

题目描述: 给定三个字符串A, B, C,判断C是否由A和B交错构成.交错构成的意思是,对于字符串C,可以将其每个字符标记为A类或B类,使得我A类的每个字符顺序构成了A字符串,B类的每个字符顺序构成了B字符串.如:对于A="rabbit" B="mq", "rabmbitq"是由A和B交错构成的,但"rabbqbitm"不是由A和B交错构成. 解题思路: 1.直接顺序比较,从C中依次拿掉A,看剩下的是不是等于B,若是则返回tr

leetCode 题解之字符串中第一个不重复出现的字符

1.题目描述 Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1. Examples:  s = "leetcode" return 0.  s = "loveleetcode", return 2. Note: You may assume the string contain only

Leetcode 345. 反转字符串中的元音字母 By Python

编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leetcode" 输出: "leotcede" 说明: 元音字母不包含字母"y". 思路 设立2个指针,一个从索引0开始向右,一个从末尾向前,根据条件进行处理即可 代码 class Solution: def reverseVowels(self, s): &quo