该题上一题的逆过程,只要考虑清楚了上面一题的过程,此题只要考虑每个符号对应的代表的值,然后根据紧跟在后面的符号判断应该加还是减去对应的值。
class Solution {
public:
int romanToInt(string s) {
string ss="IVXLCDM";
int num[]={1,5,10,50,100,500,1000};
int answer=0;
int len=s.size();
int len1=ss.size();
for(int i=0;i<len;i++){
for(int j=0;j<len1;j++){
if(s[i]==ss[j]){
if((i+1<len)&&(j<len1-2)&&((s[i+1]==ss[j+1])||(s[i+1]==ss[j+2])))
answer-=num[j];
else
answer+=num[j];
break;
}
}
}
return answer;
}
};
下面是个直接的字符匹配,没什么好说的,每次把匹配成功的段作为与下个字符串匹配的新串。
class Solution {
public:string longestCommonPrefix(vector<string> &strs) {
string ans="";
int len=strs.size();
if(len==0)return ans;
int count=strs[0].size();
for(int i=1;i<len;i++){
int j=0;
for(j=0;j<strs[i].size()&&j<count;j++){
if(strs[0][j]!=strs[i][j])
break;
}
count=j;
}
for(int i=0;i<count;i++)ans+=strs[0][i];
return ans;
}
};