这个问题在求职面试中呈现给我,我认为这很好,因为有几种方法可以解决它。
描述如下:
同样,接受其他缩写,例如“ i16ion ”,“ internationali2tion ”,甚至“ 20 ”。
要跳过的数字可以是任何正整数(不为0,不为负数) 数字),字符串可能包含多个跳过事件 - 例如,“ int3ationa2za1ion ”也是可以接受的。
原始字符串不包含数字 - 因此缩写字符串中的每个数字都代表跳过。
缩写字符串也可以以跳过开头或结尾 - “ 6ationalizati2 ”, 示例
给定两个字符串 - 一个表示原始字符串,另一个表示缩写,确定缩写字符串是否有效。执行此操作的方法必须实现签名
public static boolean equals (String orig, String abbr);
答案 0 :(得分:6)
我真的不应该回答这个,因为你没有展示你的代码,但我无法抗拒,因为代码太酷了:
public static boolean equals (String orig, String abbr) {
return orig.matches(abbr.replaceAll("\\d+", ".{$0}"));
}
这可以通过将所有数字转换为具有量词的点的正则表达式,例如:
"i16ion" -> "i.{16}ion"
\d+
表示“一个或多个数字(贪婪)”,$0
是对整个匹配的反向引用。
FYI java的String.matches()
方法必须与整个字符串匹配,因此您甚至不需要在许多其他方面使用^
或尾随$
如果语言仅匹配字符串的 part ,则返回true。