首页 > 搜索 > 逻辑原创版经典50题,程序员面试金典

逻辑原创版经典50题,程序员面试金典

互联网 2021-01-28 01:00:29
在线算命,八字测算命理
1. 题目

你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。 例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。 但需注意"a"和"b"不能同时表示相同的字符串。 编写一个方法判断value字符串是否匹配pattern字符串。

示例 1:输入: pattern = "abba", value = "dogcatcatdog"输出: true示例 2:输入: pattern = "abba", value = "dogcatcatfish"输出: false示例 3:输入: pattern = "aaaa", value = "dogcatcatdog"输出: false示例 4:输入: pattern = "abba", value = "dogdogdogdog"输出: true解释: "a"="dogdog",b="",反之也符合规则提示:0 if(pattern==value)return true;else if(pattern=="" && value!="")return false;int i, a = 0, b = 0, vlen = value.size();for(i = 0; i if(value=="")//只有一种字符,其代表空串即可满足return true;a = max(a, b);return onlyAorB(value, a);}//a,b均有的情况//a,b均可以表示空字符串, "ab",""if(onlyAorB(value,a) && value.size()!=0)//b表示空串return true;if(onlyAorB(value,b) && value.size()!=0)//a表示空串return true;//a,b均不表示空int la=1, lb=1;//a,b代表的长度while(la*a la++;continue;}lb = (vlen-la*a)/b;if(good(la,lb,pattern,value))return true;la++;}return false;}bool onlyAorB(string& val, int a){if(val.size()%a)//不能整除,不行return false;int n = val.size()/a;string sub = val.substr(0,n);for(int j = n; j int idxa = -1, idxb = -1, i = 0, idx = 0;while(idxa==-1 || idxb==-1){//找到a,b代表的字符的idxif(pat[i]=='a'){if(idxa == -1)idxa = idx;idx += la;}else{if(idxb == -1)idxb = idx;idx += lb;}i++;}string sa = val.substr(idxa, la);//a代表的字符string sb = val.substr(idxb, lb);//b代表的字符int j = 0, delta;for(i = 0; i delta = la;if(val.substr(j,la) != sa)return false;}else{delta = lb;if(val.substr(j,lb) != sb)return false;}}return true;}};

在这里插入图片描述

免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读