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

实现反转嵌套括号内字符的函数及C#代码问题排查

括号内字符串反转函数的代码问题排查

需求:编写一个函数,反转输入字符串中括号(支持嵌套)内的字符,输入字符串的括号始终格式正确、匹配。

示例:

  • 当输入 "(bar)",函数返回 "rab"
  • 当输入 "foo(bar)baz",函数返回 "foorabbaz"
  • 当输入 "foo(bar)baz(blim)",函数返回 "foorabbazmilb"
  • 当输入 "foo(bar(baz))blim",函数返回 "foobazrabblim"(处理逻辑是先转为"foo(barzab)blim",再得到最终结果)

我编写了如下C#代码,但运行后始终返回原输入字符串,明明用了String.Replace却没有生效,请求排查原因:

string solution(string inputString) {
    int first, last;
    string word;
    while (true) {
        if (inputString.Contains("()")) {
            first = inputString.LastIndexOf("(");
            last = inputString.IndexOf(")");
            word = inputString.Substring(first+1, last-first-1);
            inputString.Replace(inputString.Substring(first, last-first), backwardinator(word));
        } else {
            break;
        }
    }
    
    return inputString;
}

string backwardinator(string word) {
    string newWord = "";
    
    for (int i = word.Length - 1; i >= 0; i--) {
        newWord += word[i];
    }
    
    return newWord;
}

问题排查与修复

1. String.Replace未生效的核心原因

C#中的字符串是不可变类型,Replace方法不会直接修改原字符串,而是返回一个包含替换结果的新字符串。你需要将替换后的结果重新赋值给inputString,否则原字符串不会有任何变化。

2. 循环条件错误

你用inputString.Contains("()")作为循环判断条件,但只有当字符串中存在空括号时才会进入循环,这完全不符合需求——我们需要处理所有存在括号对的情况,不管括号内是否有内容。正确的循环条件应该是判断字符串中是否还有左括号:while (inputString.Contains("("))。

3. 括号匹配逻辑错误

  • 你用LastIndexOf("(")找到最后一个左括号后,用IndexOf(")")找的是整个字符串的第一个右括号,这会导致嵌套括号时匹配错误(比如foo(bar(baz))blim中,最后一个左括号对应的右括号是它后面的第一个右括号,而不是字符串开头的右括号)。正确的做法是从找到的左括号位置开始寻找对应的右括号:last = inputString.IndexOf(")", first)。
  • Substring的长度参数错误:inputString.Substring(first, last-first)只取了从左括号到右括号前一位的内容,漏掉了右括号本身。正确的长度应该是last - first + 1(包含左右两个括号)。

修正后的代码

string solution(string inputString) {
    int first, last;
    string word;
    // 修改循环条件:只要还有左括号就继续处理
    while (inputString.Contains("(")) {
        first = inputString.LastIndexOf("(");
        // 从左括号位置开始找对应的右括号
        last = inputString.IndexOf(")", first);
        word = inputString.Substring(first + 1, last - first - 1);
        // 将Replace的结果重新赋值给inputString
        inputString = inputString.Replace(inputString.Substring(first, last - first + 1), backwardinator(word));
    }
    
    return inputString;
}

string backwardinator(string word) {
    // 用数组反转更高效,替代逐个字符拼接
    char[] charArray = word.ToCharArray();
    Array.Reverse(charArray);
    return new string(charArray);
}

内容的提问来源于stack exchange,提问作者pmelan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:17:05