题目1:14.最长公共前缀
思路和解析:
#define _CRT_SECURE_NO_WARNINGS
//最长公共前缀
char* longestCommonPrefix(char** strs, int strsSize)
{// 如果字符串数组为空,则返回空字符串if (strsSize == 0){return "";}// 将第一个字符串设定为最长公共前缀值char* prefix = strs[0];// 逐一比较每个字符串,更新最长公共前缀值for (int i = 1; i < strsSize; i++){int j = 0;// 逐个字符比较,直到遇到字符串末尾或者不相等的字符//以["flower","flow","flight"]举例//j=0进去,历遍完flower//j=1进去,到判断为\0停止,截断位置为w//j=2进去,到o!=i停止,截断位置为lwhile (prefix[j] != '\0' && strs[i][j] != '\0' && prefix[j] == strs[i][j]){j++;}// 将最长公共前缀值截断至当前位置prefix[j] = '\0';}return prefix;
}
题目2:20.有效的括号
思路和解析:
//有效的括号
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<stdbool.h>bool isValid(char* s)
{int len = strlen(s); // 获取字符串长度int* stack = malloc(sizeof(int) * len); // 创建一个数组作为栈int count = 0; // 记录栈中元素个数for (int i = 0; i < len; i++){if (s[i] == '(') // 如果是左括号'(',则将对应的右括号')'入栈{stack[count++] = ')';}else if (s[i] == '{') // 如果是左花括号'{',则将对应的右花括号'}'入栈{stack[count++] = '}';}else if (s[i] == '[') // 如果是左方括号'[',则将对应的右方括号']'入栈{stack[count++] = ']';}else if (count == 0 || stack[count - 1] != s[i]) // 如果栈为空或栈顶元素不等于当前字符,则返回false{return false;}else // 否则出栈一个元素{count--;}}return count == 0; // 最后检查栈是否为空,若为空则返回true,否则返回false
}
题目3:26.删除有序数组中的重复项
思路和解析:
//删除有序数组中的重复项
//
int removeDuplicates(int* nums, int numsSize)
{int fast = 0, slow = 0;//fast为找不同元素的指针,slow算是存储不同元素的指针while (fast < numsSize){if (nums[fast] == nums[slow]){fast++;//相等的时候,快指针开始找下一个值}else//不相等的时候,慢指针开始存储值{slow++;nums[slow] = nums[fast++];}}return slow + 1;//返回慢指针// 最后返回的是slow+1,因为slow为下标,+1后才是数组长度
}