一道题目

given a string ,return the longest substring that contains at most two characters.

extern "C" char *SubStringWithAtMost2Chars(char * pStr, int len)
{
    if(len <= 2)
        return pStr;

    char ch1, ch2;
    int ch1Index= -1, ch1Cnt = 0, ch2Cnt = 0;
    char lastCh1 = ‘0‘, lastCh2 = ‘0‘;
    int lastCh1Index = -1,lastCh2Index = -1, lastCh1Cnt = 0, lastCh2Cnt = 0;

    for(int i = 0;i< len; i++)
    {
        if(lastCh1Cnt == 0)
        {
            lastCh1 = pStr[i];
            lastCh1Index = i;
            lastCh1Cnt ++;
        }
        else
        {
            if(lastCh2Cnt == 0)
            {
                if(pStr[i] == lastCh1)
                {
                    lastCh1Cnt++;
                }
                else
                {
                    lastCh2 = pStr[i];
                    lastCh2Cnt++;
                    lastCh2Index = i;
                }
            }
            else
            {
                if(pStr[i] == lastCh2)
                {
                    lastCh2Cnt++;
                }
                else
                {

                    if((lastCh1Cnt + lastCh2Cnt) > (ch1Cnt + ch2Cnt))
                    {
                        ch1 = lastCh1;
                        ch2 = lastCh2;
                        ch1Index = lastCh1Index;
                        ch1Cnt = lastCh1Cnt;
                        ch2Cnt = lastCh2Cnt;
                    }
                    lastCh1 = lastCh2;
                    lastCh1Index = lastCh2Index;
                    lastCh1Cnt = lastCh2Cnt;

                    //below is missed
                    lastCh2Cnt = 1;
                    lastCh2Index = i;
                    lastCh2 = pStr[i];
                }
            }
        }
    }
    if((lastCh1Cnt + lastCh2Cnt) > (ch1Cnt + ch2Cnt))
    {
        ch1 = lastCh1;
        ch2 = lastCh2;
        ch1Index = lastCh1Index;
        ch1Cnt = lastCh1Cnt; //missed
        ch2Cnt = lastCh2Cnt; //missed
    }

    char *pSubStr = (char *) malloc(ch1Cnt + ch2Cnt + 1);
    memset(pSubStr, 0, ch1Cnt + ch2Cnt + 1);
    memcpy(pSubStr,pStr+ ch1Index, ch1Cnt + ch2Cnt);
}
时间: 2024-11-25 21:29:47

一道题目的相关文章

由一道题目引出的java多态

某次逛论坛时发现一个非常有意思的题目,如下: class A<B> { public String show(A obj) { return ("A and A"); } public String show(B obj) { return ("A and B"); } } class B extends A { public String show(B obj) { return ("B and B"); } public Stri

分析函数之初体验(一)——一道题目产生的兴趣

本来公司说是要做BI的,后来被改成了一个报表系统,失去了体验BI的机会,有些不爽. 报表系统是由顾问公司做,顾问公司说要看我们的SQL水平,给出了一份试题,其中有一题是这样的: t_hykbgjl 记录了会员卡每次的发生额(nFse) .余额(nYe)及卡号(sKH),对于同一会员卡,上一条记录的余额加上本次发生额应等于本次的余额.否则帐将不平.记录号为sJlbh,请写出列出所有会员卡不平帐记录的Sql语句. 从题目上分析,需要把上一行的余额拿下来进能计算,如果采用传统写法,可能需要很多的嵌套,

拉勾上的一道题目

在拉勾上看到一道题目,或许有很多精妙的做法,欢迎讨论,集思广益.题目如下: FizzBuzzWhizz你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏.此时有100名学生在上课.游戏的规则是: 1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3.5.7. 2. 让所有学生拍成一队,然后按顺序报数. 3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz:如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz:如果所报数字是第三个特殊数

从一道题目看类加载

有一道非常经典的题目,如果对虚拟机加载类的过程不熟悉,很容易就答错,题目如下: public class Singleton { public static Singleton instance = new Singleton(); public static int a; public static int b = 0; private Singleton() { a++; b++; } public static Singleton getInstance() { return instan

动态规划学习中的一道题目

记得初中时候的一篇文章说,做学问,必须要有学和问两个方面. 做了一些动态规划题目之后偶然看到这个介绍动态规划的文章.然后遇见第一道题目就卡壳. 经过反思文章以及自己思考,总算对题目有了一些理解.下面分享给大家,初学者们看到这个题目不至于太过茫然——像我一样. 工厂生产某种产品,每单位(千件)的成本为1(千元),每次开工的固定成本为3(千元),工厂每季度的最大生产能力为6(千件).经调查,市场对该产品的需求量第一.二.三.四季度分别为        2,3,2,4(千件).如果工厂在第一.二季度将

Poj 3233 矩阵快速幂,暑假训练专题中的某一道题目,矩阵快速幂的模板

题目链接  请猛戳~ Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + - + Ak. Input The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 109) and m (m <

参加微软在线测试的一道题目

题目 : BeautifulString 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 We say a stringis beautiful if it has the equal amount of 3 or more continuous letters (inincreasing order.) Here are someexample of valid beautiful strings: "abc", "cde",&quo

一道题目- Find the smallest range that includes at least one number from each of the k lists

You have k lists of sorted integers. Find the smallest range that includes at least one number from each of the k lists. For example, List 1: [4, 10, 15, 24, 26] List 2: [0, 9, 12, 20] List 3: [5, 18, 22, 30] The smallest range here would be [20, 24]

关于设计模式的一道题目

一个系统,提供多个http协议的接口,返回的结果Y有json格式和jsonp格式.Json的格式为{"code":100,"msg":"aaa"},为了保证该协议变更之后更好的应用到多个接口,为了保证修改协议不影响到原先逻辑的代码,以下哪些设计模式是需要的?协议的变更指的是日后可能返回xml格式,或者是根据需求统一对返回的消息进行过滤.() A.Aadapter B.factory method C.proxy D.decorator E.com

C Primer plus 的一道题目

#include<stdio.h>#define TAX_RATE1 0.15#define TAX_RATE2 0.2#define TAX_RATE3 0.25#define SALARY_RATE1 1.5#define LEVEL1 8.75#define LEVEL2 9.33#define LEVEL3 10.00#define LEVEL4 11.20double Calculate_salary(int time,double pay){ double salary; if(t