leetcode Java算法练习2

13.罗马数字转整数

题目如下
在这里插入图片描述

该解法参考自题目中的题解

思路是判断罗马数字和下一个罗马数字的大小,preNum表示前一个罗马数字代表的整数,num表示后一个罗马数字代表的整数,若preNum<num,则减去前一个罗马数字的preNum,同时,经过推断发现,最后一个罗马数字一定是加上它的值,于是可以得出以下代码

package Test13;

public class Test13 {
    public static void main(String[] args) {

        String s = "LVIII";
        Solution so = new Solution();
        System.out.println(so.romanToInt(s));
    }



}

class Solution {
    public int romanToInt(String s) {
        int sum = 0;//定义sum记录罗马数字转为整数的值
        int preNum = 0;//记录前一个罗马数字代表的整数
        for(int i = 0;i<s.length();i++){
            int num = getNum(s.charAt(i));
            if(preNum < num){
                sum -= preNum;
            }else{
                sum += preNum;
            }
            preNum = num;
        }
        sum += preNum;//加上最后一个罗马数字代表的整数
        return sum;
    }

//获取罗马数字代表的整数
    public int getNum(char ch){
        switch(ch){
            case 'I' : return 1;
            case 'V' : return 5;
            case 'X' : return 10;
            case 'L' : return 50;
            case 'C' : return 100;
            case 'D' : return 500;
            case 'M' : return 1000;
            default: return 0;
        }
    }
}

14.最长公共前缀

题目如下
在这里插入图片描述

我们可以通过两次循环,将字符串数组中的元素与字符串数组中的第一个元素进行比较,并且得到最长公共前缀,若是元素全部都为公共前缀,则需要再次查看其长度是否比已得最长公共前缀小。最终可以返回得出的结果。代码如下

package test14;

public class Test14 {
    public static void main(String[] args) {
        String[] strs = new String[]{"flower","flight","flow"};
        Solution so = new Solution();
        System.out.println(so.longestCommonPrefix(strs));
    }
}


class Solution {
    public String longestCommonPrefix(String[] strs) {
        String answer = "";//先将结果定义为一个空字符串。
        if(strs.length == 0){//若传入的字符串数组空,直接返回结果;
            return answer;
        }
        int sameLength = strs[0].length();//定义最长公共前缀的长度。
        for(int i = 1;i<strs.length;i++){//将传入数组中的第一个字符串和后面的其他字符串相比较
            int j = 0;
            a:for(;j<strs[0].length() && j<strs[i].length();j++){
                if(strs[0].charAt(j) != strs[i].charAt(j)){
                    if(j < sameLength) {//记录最长公共前缀的长度
                       sameLength = j;
                    }
                    break a;
                }
            }
            //若是比较的字符串全都是公共前缀,则判断其长度是否小于目前的最长公共前缀的长度,若小于则更新sameLength
            if(strs[i].length() < sameLength){
                sameLength = strs[i].length();
            }
            //若最长公共前缀长度已经为0,直接返回空字符串。
            if(sameLength == 0){
                return answer;
            }
        }
        for(int x = 0;x < sameLength;x++){
            answer += strs[0].charAt(x);
        }
        return answer;
    }
}
0;x < sameLength;x++){
            answer += strs[0].charAt(x);
        }
        return answer;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值