Ass*_*afs 1 java string algorithm string-matching
这个问题在求职面试中呈现给我,我认为这很好,因为有几种方法可以解决它.
描述如下:
类似地,接受诸如" i16ion "," internationali2tion "甚至" 20 "的其他缩写.
要跳过的数字可以是任何正整数(没有0,没有负数),并且该字符串可能包含多个跳过事件 - 例如," int3ationa2za1ion "也是可接受的.
原始字符串不包含数字 - 因此缩写字符串中的每个数字都表示跳过.
缩写字符串也可以以跳过开头或结尾 - 例如" 6ationalizati2 ".
给定两个字符串 - 一个表示原始字符串,另一个表示缩写,确定缩写字符串是否有效.执行此操作的方法必须实现签名
public static boolean equals (String orig, String abbr);
Run Code Online (Sandbox Code Playgroud)
我真的不应该回答这个,因为你没有显示你的代码,但我无法抗拒,因为代码太酷了:
public static boolean equals (String orig, String abbr) {
return orig.matches(abbr.replaceAll("\\d+", ".{$0}"));
}
Run Code Online (Sandbox Code Playgroud)
这通过将所有数字转换为与量词相对应的点的正则表达式来实现,例如:
"i16ion" -> "i.{16}ion"
Run Code Online (Sandbox Code Playgroud)
\d+表示"一个或多个数字(贪婪)",$0是对整个比赛的反向引用.
FYI java的String.matches()方法必须匹配整个字符串,所以你甚至不需要在许多其他语言中返回true的前导^或尾随$,如果它只匹配字符串的一部分.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |