【每日刷题】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;
}