【问题描述】[中等]

你有两个字符串,即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 <= len(pattern) <= 1000
0 <= len(value) <= 1000
你可以假设pattern只包含字母"a"和"b",value仅包含小写字母。

【解答思路】

枚举



时间复杂度

class Solution {public boolean patternMatching(String pattern, String value) {int count_a = 0, count_b = 0;for (char ch: pattern.toCharArray()) {if (ch == 'a') {++count_a;} else {++count_b;}}if (count_a < count_b) {int temp = count_a;count_a = count_b;count_b = temp;char[] array = pattern.toCharArray();for (int i = 0; i < array.length; i++) {array[i] = array[i] == 'a' ? 'b' : 'a';}pattern = new String(array);}if (value.length() == 0) {return count_b == 0;}if (pattern.length() == 0) {return false;}for (int len_a = 0; count_a * len_a <= value.length(); ++len_a) {int rest = value.length() - count_a * len_a;if ((count_b == 0 && rest == 0) || (count_b != 0 && rest % count_b == 0)) {int len_b = (count_b == 0 ? 0 : rest / count_b);int pos = 0;boolean correct = true;String value_a = "", value_b = "";for (char ch: pattern.toCharArray()) {if (ch == 'a') {String sub = value.substring(pos, pos + len_a);if (value_a.length() == 0) {value_a = sub;} else if (!value_a.equals(sub)) {correct = false;break;}pos += len_a;} else {String sub = value.substring(pos, pos + len_b);if (value_b.length() == 0) {value_b = sub;} else if (!value_b.equals(sub)) {correct = false;break;}pos += len_b;}}if (correct && !value_a.equals(value_b)) {return true;}}}return false;}
}

【总结】

1. 有思路要实现 注意细节 Talk is cheap,show me the code.
2.双字符串匹配问题

2.1 边界问题 逐个是否为空
2.2 两个之间的长度 细节比较
2.3 匹配问题 可以转化为出现次数*长度

3.细节

字符串转字符数组 & 处理 & 字符数组转字符串

char[] array = pattern.toCharArray();for (int i = 0; i < array.length; i++) {array[i] = array[i] == 'a' ? 'b' : 'a';}pattern = new String(array);

转载链接:https://leetcode-cn.com/problems/pattern-matching-lcci/solution/mo-shi-pi-pei-by-leetcode-solution/

[Leedcode][JAVA][面试题 16.18][模式匹配][字符串][枚举]相关推荐

  1. [Leedcode][JAVA][面试题 16.03. 交点]

    [问题描述]面试题 16.03. 交点 给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值.要求浮点型误差不 ...

  2. 程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)

    1. 题目 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式. 例如,字符串"ca ...

  3. 面试题 16.18. 模式匹配

    题解: https://leetcode-cn.com/problems/pattern-matching-lcci/solution/hua-liao-ge-hui-su-de-si-lu-tu-b ...

  4. Java面试题16 牛客 以下java程序代码,执行后的结果是()

    Java面试题16 牛客 以下java程序代码,执行后的结果是() 1 2 3 4 5 6 7 8 9 10 public class Test {     public static void ma ...

  5. java面试题,将String字符串转换成数字

    2019独角兽企业重金招聘Python工程师标准>>> 题目要求:将String字符串转换成数字,不能用java自带的方法转换字符串,要求自己写一个atoi(String s),如果 ...

  6. 面试题 16.18. Pattern Matching LCCI

    Title 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式.例如,字符串"cat ...

  7. Java十六进制码的字符_【重点】java中 转16进制字符串 hex

    方法3: BigInteger bigInteger = new BigInteger(1,bytes); String string = bigInteger.toString(16);//转换成1 ...

  8. 【Java面试题视频讲解】字符串按指定长度分隔

    P5字符串按指定长度分隔

  9. [Leedcode][JAVA][面试题 08.11][硬币][动态规划]

    [问题描述] 面试题 08.11.硬币 硬币.给定数量不限的硬币,币值为25分.10分.5分和1分,编写代码计算n分有几种表示法.(结果可能会很大,你需要将结果模上1000000007)示例1:输入: ...

最新文章

  1. fisher判别_经典模式识别:Fisher线性判别
  2. Eclipse最常用快捷键
  3. java图片色阶调整、亮度调整
  4. c4d导出html,C4D动力学如何导出fbx或者其他格式?
  5. PADS2007教程(二)——PCB封装
  6. 视频伪原创消重 抖音视频md5修改在线
  7. 讯飞tts语音引擎_讯飞翻译机3.0 打造语音翻译极致体验
  8. Echarts正态分布曲线
  9. IDEA2022中的other setting(default setting)位置
  10. 【C++ 程序】 复数类 (Complex)
  11. Excel — 动态图表(复选框实现动态图)
  12. 利用计算机制作多媒体作品目标,多媒体创作工具功能有什么特点
  13. 爱普生Epson Stylus Photo R260 打印机驱动
  14. Pygame实战:家里的小孩数学算数能力很差嘛?别慌—这款“巧算24点小游戏”等你来玩,管用。
  15. Python 编程第一讲:IDE推荐
  16. Injective Protocol官方文档翻译(四) -通证经济(Token Economics)
  17. 什么是游戏盾?快快网络安全产品
  18. 【CSS】在圆上设置文字
  19. 2021高教社杯E题
  20. 华东师范计算机学硕839,华东师范大学-839-2015-计算机考研-真题.pdf

热门文章

  1. Javascript 获取和设置日期
  2. 批处理 java环境_java环境配置简单批处理方法一键OK
  3. vue省市区三级联动mysql,js/json,html/jsp
  4. 开箱一个docker
  5. Android vector矢量图应用实例
  6. android webView注入js方法
  7. 腾讯地图 添加事件和移除事件
  8. pm961 mysql_Oracle GoldenGate学习之--异构平台同步(Mysql到Oracle)
  9. maven打包报错You have to use a classifier to attach supplemental artifacts to the project instead of rep
  10. delphi 第一个字符不能是小数点_元字符的详细解析