Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1004168
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2012-10-22 23:42:17

求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)
一个相关题:找到一个字符串中的一个连续子串,这个子串内不能有任何两个字符是相同的,并且这个子串是符合要求的最长的。例如输入"abcbef",输出"cbef"。(代码弄丢,只有一个输出长的的版本,时间有限不补了)
比较简单。做第二个的时候因为一下午和编程之美较劲,脑袋蒙了,搞不定。还是看了一眼答案才出来。失败。

点击(此处)折叠或打开

  1. /*
  2.  * =====================================================================================
  3.  *
  4.  * Filename: maxincrease.c
  5.  *
  6.  * Description:
  7.  *
  8.  * Version: 1.0
  9.  * Created: 10/22/2012 09:54:26 PM
  10.  * Revision: none
  11.  * Compiler: gcc
  12.  *
  13.  * Author: royn.wang.renyuan@gmail.com (),
  14.  * Organization:
  15.  *
  16.  * =====================================================================================
  17.  */
  18. #include <stdlib.h>

  19. #include <stdio.h>
  20. #define MAX 10000

  21. /*
  22.  * === FUNCTION ======================================================================
  23.  * Name: main
  24.  * Description:
  25.  * =====================================================================================
  26.  */
  27.     int
  28. main ( int argc, char *argv[] )
  29. {
  30.     char input[] = "ads3sl456789DF3456ld345AA";
  31.     int max = 0;
  32.     int i = 0;
  33.     int result[MAX] = {0};
  34.     int last = -1;
  35.     int endindex = -1;
  36.     result[0] = 0;
  37.     for(;i<sizeof(input)-1;i++){
  38.         if(input[i] >='0' && input[i]<='9' && input[i] - '0' >last ){
  39.             last = input[i] - '0';
  40.             result[i] = result[i-1] + 1;
  41.             if( max<result[i]){
  42.                 max = result[i];
  43.                 endindex = i;
  44.             }
  45.         }
  46.         else{
  47.             last = -1;
  48.             result[i] = 0;
  49.         }
  50.     }
  51.     printf ( "max length is %d\n",max );
  52.     for(i= endindex - max+1;i<=endindex;i++){
  53.         printf ( "%c", input[i] );
  54.     }
  55.     printf ( "\n" );
  56.     return EXIT_SUCCESS;
  57. }                /* ---------- end of function main ---------- */

点击(此处)折叠或打开

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define MAX 100

  4. int main(){
  5.     char input[] = "abcbedf";
  6.     int index[26];
  7.     int length[MAX] = {0};
  8.     length[0] = 1;
  9.     int max = 0;
  10.     int i;
  11.     for(i = 0; i<26;i++){
  12.         index[i] = -1;
  13.     }
  14.     for(i = 1;i<sizeof(input)-1;i++){
  15.         if(index[input[i] - 'a'] == -1){
  16.             length[i] = length[i-1]+1;
  17.         }
  18.         else{
  19.             length[i] = i-index[input[i]-'a'];
  20.         }
  21.         index[input[i] - 'a'] = i;
  22.         max = max>length[i] ? max:length[i];
  23.     }
  24.     printf("%d\n", max);

  25. }


阅读(3294) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~