【发布时间】:2015-07-09 00:41:37
【问题描述】:
我通过电话进行了一次编程面试,并被问到这个问题:
给定一个字符串(例如):
“aksdbaalaskdhfbblajdfhacccc aoudgalsaa bblisdfhcccc”
和一个表达式(例如):
"a+b+c-"
地点:
+:表示重复2次之前的字符
-:表示重复4次之前的字符
求给定表达式在字符串中出现操作数非连续和连续出现的次数。
上面的表达式出现了4次:
1) aksdbaalaskdhfbblajdfhacccc aoudgalsaa bblisdfhcccc
^^ ^^ ^^^^
aa bb cccc
2) aksdbaalaskdhfbblajdfhacccc aoudgalsaa bblisdfhcccc
^^ ^^ ^^^^
aa bb cccc
3) aksdbaalaskdhfbblajdfhacccc aoudgalsaa bblisdfhcccc
^^ ^^ ^^^^
aa bb cccc
4) aksdbaalaskdhfbblajdfhacccc aoudgalsaa bblisdfhcccc
^^ ^^ ^^^^
aa bb cccc
我不知道该怎么做。我开始使用带有大量索引标记的迭代蛮力方法,但意识到在中途编码会多么混乱和困难:
import java.util.*;
public class Main {
public static int count(String expression, String input) {
int count = 0;
ArrayList<char[]> list = new ArrayList<char[]>();
// Create an ArrayList of chars to iterate through the expression and match to string
for(int i = 1; i<expression.length(); i=i+2) {
StringBuilder exp = new StringBuilder();
char curr = expression.charAt(i-1);
if(expression.charAt(i) == '+') {
exp.append(curr).append(curr);
list.add(exp.toString().toCharArray());
}
else { // character is '-'
exp.append(curr).append(curr).append(curr).append(curr);
list.add(exp.toString().toCharArray());
}
}
char[] inputArray = input.toCharArray();
int i = 0; // outside pointer
int j = 0; // inside pointer
while(i <= inputArray.length) {
while(j <= inputArray.length) {
for(int k = 0; k< list.size(); k++) {
/* loop through
* all possible combinations in array list
* with multiple loops
*/
}
j++;
}
i++;
j=i;
}
return count;
}
public static void main(String[] args) {
String expression = "a+b+c-";
String input = "aaksdbaalaskdhfbblajdfhacccc aoudgalsaa bblisdfhcccc";
System.out.println("The expression occurs: "+count(expression, input)+" times");
}
}
在花了很多时间迭代之后,他提到了递归,但我仍然看不到递归的明确方法,我无法解决这个问题。我现在正在尝试在面试后解决它,但仍然不确定如何解决这个问题。我应该如何解决这个问题?解决方案明显吗?我认为这对于编码电话面试来说是一个非常难的问题。
【问题讨论】:
-
我也想过暴力破解它。但我会尝试以我的方式去做。。
-
这是一个很难的问题吗?还是只有我?
-
@Kingsley 不,这并不难。或者您想要工作和测试过的代码?
-
@Sasha Salauyou 我以为面试题很难,我想我只需要多练习!
-
@Kingsley 是的,只是练习。如果您对我的回答有什么不明白的地方,请追问。顺便说一句,这个时间限制是多少?
标签: java regex string algorithm expression