LeetCode13、14 题解

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];
}
flowerfl
flyfl
flowfl

1、将字符串数组看做strsSize行strlen(strs[0])列的字符表
2、依次比较每一列字符是否相同,若相同,则继续向下比较;反之,代表当前字符不是公共前缀字符,则将strs[0][i](即为第一个字符串的非公共前缀字符的位置)设置为‘\n’,代表公共前缀字符结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值