You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:42:16