罗马数字转整数
上一题是整数转罗马数字,这题是罗马数字转整数。虽然是简单题,但我感觉其实有点烦。
上一次是数字转字符,这次是字符转数字,总的来说大体思想还是差不多的。
首先整个字符串可能是这样构造的:
然后你根据每个字符依次处理(这里从右往左)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; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
最长公共前缀
这题的话思路很简单,但是需要一定优化,尽量减少判断,所以这里使用最短的那个串作为预备遍历的串(公共前缀极限这么大)。然后只需要每次遍历比较找到第一个不同的即停止。否则一直进行。
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(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
不知道0ms是什么神仙啊
结语
原创不易,bigsai请你帮两件事帮忙一下:
-
star支持一下, 您的肯定是我在平台创作的源源动力。
-
微信搜索「bigsai」,关注我的公众号,不仅免费送你电子书,我还会第一时间在公众号分享知识技术。加我还可拉你进力扣打卡群一起打卡LeetCode。
记得关注、咱们下次再见!
文章来源: bigsai.blog.csdn.net,作者:Big sai,版权归原作者所有,如需转载,请联系作者。
原文链接:bigsai.blog.csdn.net/article/details/108209325