这是检查二叉树中相似单词的作业的一部分。我已经坚持这个bug太久了,非常感谢任何帮助解决这个问题。
输出:接受的所有字符串 [a-z]实现或[a-z] chiev或......或实现[a-z]
问题:算法生成字符串“achieve”,但.compareTo()和.equals()则表示不然。
public class Problem {
static ArrayList<String> oneRedundantChar(String s) {
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
char[] arr = new char[(s.length()*2) + 1];
char[] sarr = s.toCharArray();
for (int i = 1; i < arr.length; i+= 2) {
arr[i] = sarr[(i-1)/2];
}
char[] temp = arr.clone();
ArrayList<String> reparr = new ArrayList<>();
for (int i = 0; i < s.length()*2+1; i += 2) {
for (int j = 0; j < alphabet.length; j++) {
arr[i] = alphabet[j];
reparr.add(String.valueOf(arr));
}
arr = temp.clone();
}
return reparr;
}
public static void main(String[] args) {
for (String s : oneRedundantChar("achiev")) {
System.out.println(s);
if (s.compareTo("achieve") == 0) {
System.out.println("Success");
}
if(s.equals("achieve")) {
System.out.println("Success");
}
答案 0 :(得分:0)
你的&#34; s&#34;字符串是间隔开的(例如,&#34; a v h e v&#34;),冗余字符放在空间的某处。即使&#34;实现&#34;是生成的,它是空格(&#34; a c h i e ve&#34;),这显然与equals相比不同,或者比较为&#34;实现&#34;。将生成的字符串放入结果数组(reparr.add(String.valueOf(arr));
)时,只需选择非空字符。