LeetCode 13罗马数字转整数&14最长公共前缀

罗马数字转整数

上一题是整数转罗马数字,这题是罗马数字转整数。虽然是简单题,但我感觉其实有点烦。

在这里插入图片描述

上一次是数字转字符,这次是字符转数字,总的来说大体思想还是差不多的。
首先整个字符串可能是这样构造的:
在这里插入图片描述

然后你根据每个字符依次处理(这里从右往左)I类型,V类型,X类型。每种类型只需要考虑一下特殊情况的数值加上去就ok。记得移动字符串光标位置就可。

实现代码为:

public static int romanToInt(String s) {
	 int numvalue []={1,5,10,50,100,500,1000};
	 char charvalue []= {'I', 'V', 'X', 'L','C','D','M'};
	 StringBuilder sBuilder=new StringBuilder();
	 int index=s.length()-1;
	 int value=0;
	 for(int i=0;i<charvalue.length;i++)//i代表字符
	 {
		 if(index<0)break;
		 if(s.charAt(index)==charvalue[i])
		 {
			 if(i%2==0&&i-2>=0&&index>=1&&s.charAt(index-1)==charvalue[i-2])
			 {
				 value+=numvalue[i];
				 value-=numvalue[i-2];
				 index-=2;
			 }
			 else if(i%2==1&&i-1>=0&&index>=1&&s.charAt(index-1)==charvalue[i-1])
			 {
				 value+=numvalue[i];
				 value-=numvalue[i-1];
				 index-=2;
			 }
			 while(index>=0&&s.charAt(index)==charvalue[i])//正常数字
			 {
				 value+=numvalue[i];
				 index--;
			 }
		 }	
	 }
	 return value;
	  
  }

最长公共前缀

image-20201115204145914

这题的话思路很简单,但是需要一定优化,尽量减少判断,所以这里使用最短的那个串作为预备遍历的串(公共前缀极限这么大)。然后只需要每次遍历比较找到第一个不同的即停止。否则一直进行。

ac代码为:

public String longestCommonPrefix(String[] strs) {
      StringBuilder sBuilder=new StringBuilder();
		if(strs==null||strs.length==0)return "";
		String team=strs[0];
		for(int i=0;i<strs.length;i++)
		{
			if(strs[i].length()<team.length())
			{
				team=strs[i];
			}
		}
		int i=0;
		for(;i<team.length();i++)
		{
			for(int j=0;j<strs.length;j++)
			{
				//System.out.println(strs[j].charAt(i)+" "+team.charAt(i));
				if(strs[j].charAt(i)!=team.charAt(i))
				{
					 return sBuilder.toString();
					
				}
			}
			sBuilder.append(team.charAt(i));
		}
		return sBuilder.toString();		
    }

不知道0ms是什么神仙啊
在这里插入图片描述

结语

原创不易,bigsai请你帮两件事帮忙一下:

  1. star支持一下, 您的肯定是我在平台创作的源源动力。

  2. 微信搜索「bigsai」,关注我的公众号,不仅免费送你电子书,我还会第一时间在公众号分享知识技术。加我还可拉你进力扣打卡群一起打卡LeetCode。

记得关注、咱们下次再见!

image-20201114211553660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员bigsai

喝杯咖啡压压惊!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值