中级农民
- 积分
- 104
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2021-5-29
- 最后登录
- 1970-1-1
|
I cam up with the below. Not sure if this covers all the use cases. Rice if this helps- public void run() {
- String text = "CDFGAGB";
- String pattern = "*A*";
- System.out.println(patternMatch(text, pattern));
- }
-
- public int patternMatch(String s, String pattern) {
- String[] patternList = pattern.split("\\*");
-
- //for (int i = 0; i < patternList.length; i++) {
- System.out.println(patternList.length);
- //}
-
- if (patternList.length == 0) return 0;
- if(patternMatch(s, patternList, 0))
- return getIndex(s, patternList[0]);
- else return -1;
-
- }
-
- public boolean patternMatch(String s, String[] pattern, int index) {
- while (index < pattern.length && pattern[index] == "") index++;
- if (index == pattern.length) return true;
-
- int patIndex = getIndex(s, pattern[index]);
-
- if (patIndex == -1) return false;
-
- if (index == pattern.length-1) return true;
- if (patIndex+pattern[index].length() >= s.length()) return false;
-
- return patternMatch(s.substring(patIndex+pattern[index].length()), pattern, index+1);
- }
-
- public int getIndex(String s, String pattern) {
- int m = s.length();
- int n = pattern.length();
-
- for (int i = 0; i <= m-n; i++) {
- boolean notMatch = false;
- for (int j = 0; j < n; j++) {
- if (s.charAt(i+j) != pattern.charAt(j)) {
- notMatch = true;
- break;
- }
- }
- if (!notMatch) return i;
- }
-
- return -1;
- }
复制代码 |
|