class Solution {
public:
int romanToInt(string s) {
int sum=0;
for(int i=0;i<s.length();)
{
int j;
string temp;
switch(s[i])
{
case 'M':
for(j=i+1;j<s.length();j++)
if(s[j]!='M')
break;
temp=s.substr(i,j-i);
if(temp.length()==1)
sum+=1000;
else if(temp.length()==2)
sum+=2000;
else if(temp.length()==3)
sum+=3000;
i=j;
break;
case 'C':
for(j=i+1;j<s.length();j++)
if(s[j]=='X'||s[j]=='L'||s[j]=='I'||s[j]=='V')
break;
temp=s.substr(i,j-i);
if(temp.length()==1)
sum+=100;
else if(temp[1]=='D')
sum+=400;
else if(temp[1]=='M')
sum+=900;
else if(temp.length()==2&&temp[1]=='C')
sum+=200;
else if(temp.length()==3)
sum+=300;
i=j;
break;
case 'D':
for(j=i+1;j<s.length();j++)
if(s[j]=='X'||s[j]=='L'||s[j]=='I'||s[j]=='V')
break;
temp=s.substr(i,j-i);
sum+=(400+100*temp.length());
i=j;
break;
case 'X':
for(j=i+1;j<s.length();j++)
if(s[j]=='I'||s[j]=='V')
break;
temp=s.substr(i,j-i);
if(temp.length()==1)
sum+=10;
else if(temp.length()==2&&temp[1]=='X')
sum+=20;
else if(temp.length()==3)
sum+=30;
else if(temp.length()==2&&temp[1]=='L')
sum+=40;
else if(temp.length()==2&&temp[1]=='C')
sum+=90;
i=j;
break;
case 'L':
for(j=i+1;j<s.length();j++)
if(s[j]=='I'||s[j]=='V')
break;
temp=s.substr(i,j-i);
if(temp.length()==1)
sum+=50;
else if(temp.length()==2&&temp[1]=='X')
sum+=60;
else if(temp.length()==3)
sum+=70;
else if(temp.length()==4)
sum+=80;
i=j;
break;
case 'I':
j=s.length();
temp=s.substr(i,j-i);
if(temp.length()==1)
sum+=1;
else if(temp.length()==2&&temp[1]=='I')
sum+=2;
else if(temp.length()==3)
sum+=3;
else if(temp.length()==2&&temp[1]=='V')
sum+=4;
else if(temp.length()==2&&temp[1]=='X')
sum+=9;
i=j;
break;
case 'V':
j=s.length();
temp=s.substr(i,j-i);
sum+=(4+temp.length());
i=j;
break;
}
}
return sum;
}
};
09-18