Java递归实现字符串去重问题:空StringBuilder无法正常输出
问题分析与解决
你的递归终止条件逻辑完全错误——当前代码判断i == str.length(),这意味着只要遍历索引i等于传入的StringBuilder长度,就直接打印返回。
当传入空的StringBuilder时,str.length()是0,i初始值也是0,直接触发终止条件,打印空字符串就结束了,自然不会处理输入的abc字符串。
而传入带空格的StringBuilder时,比如长度为5,i会从0开始先处理abc的前5个字符,直到i增加到5等于str.length()才终止,这时候能看到部分处理后的结果,但逻辑依然错误——如果输入字符串长度超过初始StringBuilder的长度,后面的字符根本不会被处理。
修正后的代码
public class Main { public static void main(String[] args) { String abc="appnacolllege"; Strchk(abc, 0, new StringBuilder(""), new boolean[26]); } public static void Strchk(String abc, int i, StringBuilder str, boolean stroc[]) { // 终止条件改为遍历完输入字符串的所有字符 if(i == abc.length()) { System.out.println(str); return; } char currChar = abc.charAt(i); if(stroc[currChar-'a']) { // 字符已存在,直接递归到下一个索引 Strchk(abc, i+1, str, stroc); } else { stroc[currChar-'a'] = true; Strchk(abc, i+1, str.append(currChar), stroc); } } }
关键修改点
- 把终止条件从
i == str.length()改为i == abc.length():确保递归会遍历完输入字符串的每一个字符,而不是被初始StringBuilder的长度打断。 - 简化布尔条件判断
stroc[currChar-'a']==true为stroc[currChar-'a'],布尔类型可直接作为判断条件。
运行修正后的代码,传入空的StringBuilder就能正确输出去重后的字符串apncolege。
内容的提问来源于stack exchange,提问作者Aadarsh
相关产品推荐
相关产品推荐

