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;
	  
  }

最长公共前缀

在这里插入图片描述

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

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。回复进群,加入打卡。

在这里插入图片描述

扫描二维码关注公众号,回复: 11709726 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_40693171/article/details/108209325