我昨天在接受采访时询问了以下2个问题
1>给定一个字符串,计算一个新字符串,其中原始字符串中相邻的相同字符之间用"*"分隔.
示例如下所示::
function name ispublic String pairStar(String str)
pairStar("hello") ? "hel*lo"
pairStar("xxyy") ? "x*xy*y"
pairStar("aaaa") ? "a*a*a*a"
Run Code Online (Sandbox Code Playgroud)
2>给定一个字符串,计算一个新的字符串,其中所有小写的"x"字符都已移动到字符串的末尾.
示例如下所示::
function name ispublic String endX(String str)
endX("xxre") ? "rexx"
endX("xxhixx") ? "hixxxx"
endX("xhixhix") ? "hihixxx"
Run Code Online (Sandbox Code Playgroud)
我不知道如何完成给定的问题,并努力解决这个问题
在第一种情况下,您可以遍历字符串,跟踪前一个字符并将其与当前字符进行比较.使用StringBuilder构建新String.
在第二个中,使用两个字符串构建器(一个用于x以外的字符,一个用于x)进行迭代,最后将它们组合在一起.
这只是在30秒内脱离我的头顶,是最简单的方法.第二个想法是,我有可能使用正则表达式,现在我再考虑它10秒:)
对于1),这是一个非常简单的正则表达方式:
String in = "helllo goodbye";
String out = in.replaceAll("(.)(?=\\1)", "$1*");
System.out.println(out);
Run Code Online (Sandbox Code Playgroud)
打印:
hel*l*lo go*odbye
Run Code Online (Sandbox Code Playgroud)
说明:
(.) //match any one character into group 1
(?=\\1) //positive lookahead for that same character by backreferencing group 1
$1* //replace that one character with the character followed by *
Run Code Online (Sandbox Code Playgroud)
我可能会在2)稍后解决,但我不喜欢将多个问题包含在一起.
好吧,因为我正处于一个正则表达式的心情,这里是2):
String in = "xhixhix";
String out = in;
while (!out.matches("[^x]*x*")) {
out = out.replaceAll("x(.*)", "$1x");
}
System.out.println(out);
Run Code Online (Sandbox Code Playgroud)
这将替换x(something)为(something)x直到所有xs都在字符串的末尾.我敢肯定,有一种更好的方法可以使用/而不是正则表达式.
| 归档时间: |
|
| 查看次数: |
8738 次 |
| 最近记录: |