LeetCode 13罗马数字转整数14最长公共前缀
生活随笔
收集整理的這篇文章主要介紹了
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請你幫兩件事幫忙一下:
star支持一下, 您的肯定是我在平臺創作的源源動力。
微信搜索「bigsai」,關注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術。加我還可拉你進力扣打卡群一起打卡LeetCode。
記得關注、咱們下次再見!
總結
以上是生活随笔為你收集整理的LeetCode 13罗马数字转整数14最长公共前缀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刷题一个4ms的程序,代码如何优化到3m
- 下一篇: LeetCode 15三数之和16最接近