剑指offer 字符串专题 刷题记录(3)

递归:


import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    public boolean match (String str, String pattern) {
        // write code here
        if(str==null||pattern==null){
            return false;
        }
        return matchCore(str.toCharArray(),pattern.toCharArray(),0,0);
    }
    
    private static boolean matchCore(char[] str,char[] pattern,int i,int j){
        //如果模式先遍历完,则一定不匹配;如果同时遍历完,则一定匹配
        if(j==pattern.length){
            return i==str.length;
        }
        //注意防止数组索引OutOfBounds;
        if(j<pattern.length-1&&pattern[j+1]=='*'){
            if(i<str.length&&(str[i]==pattern[j]||pattern[j]=='.')){
                return matchCore(str,pattern,i,j+2)||matchCore(str,pattern,i+1,j);
            }else{
                return matchCore(str,pattern,i,j+2);
            }
        }
        
        if(str.length!=i&&(str[i]==pattern[j]||pattern[j]=='.')){
            return matchCore(str,pattern,i+1,j+1);
        }
        
           return false;
    }
    
}


简便方法:


import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    public boolean match (String str, String pattern) {
        // write code here
        return str.matches(pattern);
    }
}


剑指Offer(五十三):表示数值的字符串


剑指offer 字符串专题 刷题记录(3)


import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return bool布尔型
     */
    int index;
    public boolean isNumeric (String str) {
        // write code here
        if(str==null|| str.length()==0){
            return false;
        }
        char[] cs=str.toCharArray();
        //判断小数前位置
        index=0;
        boolean flag=scanInteger(cs);
        //判断小数后位置
        
        if(index<cs.length&&cs[index]=='.'){
            index++;
            flag=scanUnInteger(cs)||flag;
        }
        //判断E,e之类
        if(index<cs.length&&(cs[index]=='E'||cs[index]=='e')){
            index++;
            flag=flag&&scanInteger(cs);
        }
        return flag &&index>=cs.length ;
    }
    
    
    public boolean scanInteger(char[] cs){
        if(index<cs.length&&(cs[index]=='-'||cs[index]=='+')){
            index++;
        }
        return scanUnInteger(cs);
    }
    
    public boolean scanUnInteger(char[] cs){
        int temp=index;
         while(index<cs.length&&cs[index]>='0'&&cs[index]<='9'){
            index++;
        }
        return index>temp;
    }
    
}
上一篇:一起谈.NET技术,使用MonoDevelop开发GTK#图形界面


下一篇:Confluence 6 PostgreSQL 设置准备