zoukankan      html  css  js  c++  java
  • Wildcard Matching leetcode java

    描述
    Implement wildcard pa�ern matching with support for '?' and '*'.
    '?' Matches any single character. '*' Matches any sequence of characters (including the empty
    sequence).
    The matching should cover the entire input string (not partial).
    The function prototype should be:
    bool isMatch(const char *s, const char *p)
    Some examples:
    isMatch("aa","a") → false
    isMatch("aa","aa") → true
    isMatch("aaa","aa") → false
    isMatch("aa", "*") → true
    isMatch("aa", "a*") → true
    isMatch("ab", "?*") → true
    isMatch("aab", "c*a*b") → false

    分析
    跟上一题很类似。
    主要是'*' 的匹配问题。p 每遇到一个'*',就保留住当前'*' 的坐标和 s 的坐标,然后 s 从前
    往后扫描,如果不成功,则 s++,重新扫描

    代码

     1 public class WildcardMatch {
     2 
     3     public static void main(String[] args) {
     4         // TODO Auto-generated method stu 
     5         String s= "aab";
     6         String p="*";
     7         System.out.println(isMatch(s,p));
     8     }
     9 //    递归
    10         public static boolean isMatch(String s, String p) {
    11         if (p.length() == 0)
    12                 return s.length() == 0;
    13             
    14         if (p.charAt(0) == '*') {    
    15                 
    16         while (p!=null&&p.startsWith("*")) {
    17             
    18             p=p.substring(1); //跳过*
    19         }    
    20         if (p==null) 
    21             return true;
    22         while (s!= null && !isMatch(s, p)) 
    23             s=s.substring(1);
    24         return s != null;
    25       }
    26       
    27         else if (p.charAt(0) == '' || s.charAt(0) == '') return p.charAt(0) == s.charAt(0);
    28         else if (p.charAt(0) == s.charAt(0) || p.charAt(0) == '?') {
    29             
    30             return isMatch(s.substring(1), p.substring(1));
    31         }
    32         else return false;
    33         }



    34 //迭代版 35 public static boolean isMatch2(String s, String p) { 36 int i = 0; 37 int j = 0; 38 int star = -1; 39 int mark = -1; 40 while (i < s.length()) { 41 if (j < p.length() 42 && (p.charAt(j) == '?' || p.charAt(j) == s.charAt(i))) { 43 ++i; 44 ++j; 45 } else if (j < p.length() && p.charAt(j) == '*') { 46 star = j++; 47 mark = i; 48 } else if (star != -1) { 49 j = star + 1; 50 i = ++mark; 51 } else { 52 return false; 53 } 54 } 55 while (j < p.length() && p.charAt(j) == '*') { 56 ++j; 57 } 58 return j == p.length(); 59 } 60 }
  • 相关阅读:
    安装使用composer基本流程
    数据库关于group by 两个或以上条件的分析
    PHP中VC6、VC9、TS、NTS版本的区别与用法详解
    Linux 守护进程的启动方法
    PHP安装包TS和NTS的区别
    kubernetes 简单service的例子
    kubernetes 每个node上只能运行一个副本DaemonSet
    kubernetes 利用label标签来绑定到特定node运行pod
    kubernetes 简单yaml文件运行例子deployment
    kubernetes Helm-chart web UI添加
  • 原文地址:https://www.cnblogs.com/ncznx/p/9189489.html
Copyright © 2011-2022 走看看