判断字符串相等

来源:互联网 发布:剑灵捏脸数据原图 编辑:程序博客网 时间:2024/05/29 18:55

这个是参加上海某家数据咨询公司的Java笔试题,胡乱的写写,大神勿喷,菜鸟一枚。

题目:给你两个字符串,每个字符串的组成都是a-z,'*','.'这些符号,而*的功能是将其前面的字符删除,'.'可以替代任何一个字符,写一个算法判断两个字符串是否相等。

例子:
    isMatch("a*","")=true;
    isMatch("a.","ab")=true;
    isMatch(".","")=false;
    isMatch("a*.cba*c.","xcbcm") = true;

public class TestDemo {public static void main(String[] args) {/** * isMatch("a*","")=true; * isMatch("a.","ab")=true; * isMatch(".","")=false; * isMatch("a*.cba*c.","xcbcm") = true; */TestDemo testDemo = new TestDemo();System.out.println(testDemo.isMatch("a*", ""));System.out.println(testDemo.isMatch("a.", "ab"));System.out.println(testDemo.isMatch(".", ""));System.out.println(testDemo.isMatch("a*.cba*c.","xcbcm"));}public boolean isMatch(String src,String des){//处理*String srcTmp = this.resolveX(src);String desTmp = this.resolveX(des);//System.out.println(srcTmp + "   " + desTmp);//处理.//1:当存在一个字符串为空时直接返回falseif((srcTmp.length() == 0 &&desTmp.length()>0) || (srcTmp.length() > 0 &&desTmp.length() == 0)){return false;}else{//2.1:双方都为空if(srcTmp.length() == 0 && desTmp.length() == 0){return true;}else{//2.2:双方都不为空,则开始处理.return this.resolveD(srcTmp, desTmp);}}}/** * 消除字符串中的* * @param src 需要处理的字符串 * @return返回处理后的字符串,可能为空 */public String resolveX(String src){int i=0;int len = src.length();int j=0;char[] tmpArr = src.toCharArray();while(i<src.length()){char tmp = src.charAt(i);if(tmp != '*'){tmpArr[i-j] = tmpArr[i];}else{j = j + 2;len = len - 2;if((i+2) > src.length()){break;}}i++;}return new String(tmpArr,0,len);}/** * 处理字符串中的. * @param src 第一个字符串 * @param des 第二个字符串 * @return 返回处理后的字符串数组 */public boolean resolveD(String src,String des){int i = 0;char[] srcTmp = src.toCharArray();char[] desTmp = des.toCharArray();//如果两个字符串长度不同,返回falseif(src.length() != des.length()){return false;}while(i<srcTmp.length){//如果字符串相同,逐字符比较if(srcTmp[i] == desTmp[i]){i++;}else{if(srcTmp[i] == '.' || desTmp[i] == '.'){i++;}else{return false;}}}return true;}}


0 0
原创粉丝点击