求字符串中最长连续递增子数字串

求字符串中最长连续递增子数字串
例:输入串为a23b6489wci6782345xy,则输出为2345
注意,只需要考虑一位数,所以对任意字符串,最长可能的输出为0123456789.

 

我的算法:

BOOL FindSub(const char pStr[], int nLen, int &StartIndex, int &EndIndex)
{
 // 对传入值进行初始化
 StartIndex = -1;
 EndIndex = -1;

 int nStartNum = -1, nPreNumIndex = -1, nPreNum=-1, nCurNum = -1;
 for(int i=0; i<nLen; i++)
 {
  if(pStr[i] >= '0' && pStr[i] <= '9')  // 为数字
  {
   nCurNum = pStr[i];
   if(StartIndex == -1) // 负初值
   {
    StartIndex = i;
    EndIndex = i;
   }

   if(nStartNum == -1)   // 新的数字开始了
   {
    nStartNum = i;
   }
   else
   {
    if(nPreNumIndex == i-1)   // 上一个也为数字,
    {
     if(nCurNum > nPreNum) // 并且当前值比前一个大
     {
      if(i - nStartNum > EndIndex - StartIndex)
      {
       StartIndex = nStartNum;
       EndIndex = i;
      }
     }
     else
     { 
      // 重新开始计数
      nStartNum = i;
     }
    }
   }

   // 迭代更新
   nPreNumIndex = i;
   nPreNum = nCurNum;
  }
  else
  {
   nStartNum = -1;
  }
 }// for i end

 return TRUE;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值