Google – All Possible Strings
Given a string that contains '', '' could be either j or k. Find out all possible strings.
[Solution]
简单题,典型backtracking咯.
但是写code的时候还是出了点小bug。backtracking的中间结果一定要想清楚再开始码代码。
Bug出在第21行。当character不是的时候,一开始写的代码在递归回来之后并没有回溯。举个例子ab就会发现,当进行到ajb的时候,递归回到处理b的那一层,如果不把b删掉,继续return到处理j的那一层,这里本意是把j删了换k,但是结果只删了b,再加上k就变成了ajk。
Read full article from Google – All Possible Strings
Given a string that contains '', '' could be either j or k. Find out all possible strings.
[Solution]
简单题,典型backtracking咯.
但是写code的时候还是出了点小bug。backtracking的中间结果一定要想清楚再开始码代码。
Bug出在第21行。当character不是的时候,一开始写的代码在递归回来之后并没有回溯。举个例子ab就会发现,当进行到ajb的时候,递归回到处理b的那一层,如果不把b删掉,继续return到处理j的那一层,这里本意是把j删了换k,但是结果只删了b,再加上k就变成了ajk。
public
List<String> allStrings(String s) {
List<String> result =
new
ArrayList<>();
if
(s ==
null
|| s.isEmpty()) {
return
result;
}
backtracking(s,
0
, result,
new
StringBuilder());
return
result;
}
private
void
backtracking(String s,
int
pos, List<String> result, StringBuilder sb) {
if
(pos == s.length()) {
result.add(sb.toString());
return
;
}
if
(s.charAt(pos) !=
'*'
) {
sb.append(s.charAt(pos));
backtracking(s, pos +
1
, result, sb);
sb.deleteCharAt(sb.length() -
1
);
// 一定要backtrack。
}
else
{
sb.append(
"j"
);
backtracking(s, pos +
1
, result, sb);
sb.deleteCharAt(sb.length() -
1
);
sb.append(
"k"
);
backtracking(s, pos +
1
, result, sb);
sb.deleteCharAt(sb.length() -
1
);
}
}