LeetCode每日刷题
[13].罗马数字转整数
int romanToInt(char * s)
{
int result = 0;
int hash[27] = {0}; //字符运算转化为整形,创建哈希表
hash['I' - 'A'] = 1;
hash['V' - 'A'] = 5;
hash['X' - 'A'] = 10;
hash['L' - 'A'] = 50;
hash['C' - 'A'] = 100;
hash['D' - 'A'] = 500;
hash['M' - 'A'] = 1000; //初始化哈希表
for(int i = 0;i < strlen(s);i++)
{
if(i == strlen(s) - 1 ||
(hash[s[i] - 'A'] >= hash[s[i + 1] - 'A']))
//判断当前字符与下一位字符的大小
{
result += hash[s[i] - 'A'];
}
else
{
result -= hash[s[i] - 'A'];
}
}
return result ;
}
解题要点:
1、通过字符之间的运算,将字符转换为整形数字,作为哈希表的下标
2、罗马数字运算实质:比较当前字符与下一位字符的大小。若当前字符较小,则在结果中减去当前字符,反之加上当前字符。
[14]最长公共前缀
看到题解中大神的做法,比我写的简洁了不知道多少。尝试学习,写一下自己浅薄的看法。
char * longestCommonPrefix(char ** strs, int strsSize)
{
if(strsSize == 0) return "";
for(int i = 0;i < strlen(strs[0]);i++)//列数
{
for(int j = 1; j < strsSize; j++)//行数
{
if(strs[0][i] != strs[j][i])
{
strs[0][i] = '\0';
}
}
}
return strs[0];
}
flower | fl |
---|---|
fly | fl |
flow | fl |
1、将字符串数组看做strsSize行strlen(strs[0])列的字符表
2、依次比较每一列字符是否相同,若相同,则继续向下比较;反之,代表当前字符不是公共前缀字符,则将strs[0][i](即为第一个字符串的非公共前缀字符的位置)设置为‘\n’,代表公共前缀字符结束。