【每日刷题】Day8

【每日刷题】Day8

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 459. 重复的子字符串 - 力扣(LeetCode)

2. 58. 最后一个单词的长度 - 力扣(LeetCode)

3.  682. 棒球比赛 - 力扣(LeetCode)

1. 459. 重复的子字符串 - 力扣(LeetCode)

//思路:首先需要知道,最少的重复次数是1次,最少的重复字符是1个,这就说明,每个重复字符串中的字符个数不会≥1并且≤字符串长度的二分之一,因此我们首先需要确定子字符串中的字符个数

//其次:在确定了子字符串中可能的字符个数(假设为i)之后,我们需要用当前位置的字符与跳过i个字符后的字符比较(相当于比较每个子字符串对应位置的字符),如果不相等,则返回false

bool repeatedSubstringPattern(char* s)

{

    int i = 0;

    int str = strlen(s);

    int flag = 0;

    for(i = 1;i<=str/2;i++)//用于确定子字符串中字符的个数

    {

        if(str%i==0)

        {

            flag = 1;

            for(int j = i;j<str;j++)//用于比较每个子字符串中对应位置的字符

            {

                if(s[j]!=s[j-i])

                {

                    flag = 0;//不相等则说明该字符串不可以由字符串重复得

                }

            }

        }

        if(flag == 1)

        {

            return true;

        }

    }

    return false;

}

2. 58. 最后一个单词的长度 - 力扣(LeetCode)

//思路:直接从字符串末尾开始找,如果是空格,则往前走,直到不为空格停下,开始记不为空格的字符数。当再次遇到空格时,停止记数,直接返回记数大小。

int lengthOfLastWord(char* s)

{

    int size = 0;

    int str = strlen(s);

    int str1 = str-1;

    while(s[str1]==' ')//是空格直接跳过

    {

        str1--;

    }

    while(str1>=0&&s[str1]!=' ')//判断停止记数条件

    {

        size++;

        str1--;

    }

    return size;

}

3.  682. 棒球比赛 - 力扣(LeetCode)

//比较好的思路是使用变长数组对栈进行模拟。

这里我用的是笨方法——用一个数组来存储数据,最后遍历数据全部相加

int Data(char** operations,int i,int* top,int* ans)

{

    int flag = 0;

    int j = 0;

    int num = 0;

    while(operations[i][j])

    {

        char c = operations[i][j];

        if(c=='-')

        {

            flag = 1;

        }

        if(c>='0'&&c<='9')

        {

            num = num*10+c-'0';

        }

        if(c=='C')

        {

            (*top)-=2;

        }

        if(c=='D')

        {

            num = ans[*top-1]*2;

        }

        if(c=='+')

        {

            num = ans[(*top)-1]+ans[(*top)-2];

        }

        j++;

    }

    if(flag)

    {

        num*=-1;

    }

    return num;

}


 

int calPoints(char** operations, int operationsSize)

{

    int ans[operationsSize];

    int top = 0;

    int i = 0;

    int sum = 0;

    for(i = 0;i<operationsSize;i++)

    {

        ans[top] = Data(operations,i,&top,ans);

        top++;

    }

    for(i = 0;i<top;i++)

    {

        sum+=ans[i];

    }

    return sum;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值