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

面试算法求助:字符串字母反转且数字位置不变的实现思路

解题思路与实现建议

核心用双指针法就能解决,不用额外提取字母再拼接,直接在你已经转换好的char数组上操作就行,步骤如下:

  • 先定义两个指针:左指针left从数组起始位置(0)开始,右指针right从数组末尾(charArray.Length - 1)开始
  • 循环条件设为left < right:
    1. 左指针向右移动,跳过所有数字字符,直到找到第一个非数字字符
    2. 右指针向左移动,跳过所有数字字符,直到找到第一个非数字字符
    3. 交换这两个指针指向的非数字字符
    4. 左指针加1,右指针减1,继续循环
  • 循环结束后,把char数组转回字符串就是结果

结合你现有的代码,完整实现如下:

string test = "test12pop90java989python";
var charArray = test.ToCharArray();
int left = 0;
int right = charArray.Length - 1;

while (left < right)
{
    // 左指针找非数字
    while (left < right && Char.IsNumber(charArray[left]))
    {
        left++;
    }
    // 右指针找非数字
    while (left < right && Char.IsNumber(charArray[right]))
    {
        right--;
    }
    // 交换字符
    if (left < right)
    {
        char temp = charArray[left];
        charArray[left] = charArray[right];
        charArray[right] = temp;
        left++;
        right--;
    }
}

string result = new string(charArray);
Console.WriteLine(result); // 输出:tset12pop90avaj989nohtyp

这种方法时间复杂度是O(n)(n为字符串长度),每个字符最多被访问两次,空间复杂度为O(n)(对应你已经在做的char数组转换),效率高且逻辑清晰,很适合面试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:31:12