题目描述
按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。 如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下 如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。 现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。 现在给出一串字符,需要计算出它所需要花费的时间。
输入描述:
一个长度不大于100的字符串,其中只有手机按键上有的小写字母
输出描述:
输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
示例1
输入
bob
www
输出
7
7
分析:
- 记录下上次是哪个按键。
- 找到该字母在按键的哪个位置。
代码
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| int solution(string s) { int preK = 0, ans = 0;
for(int i = 0; i < s.length(); i ++) { if(s[i]>='a'&&s[i]<='c') { if(preK==2) ans+=2; if(s[i]=='a') ans++; else if(s[i]=='b') ans +=2; else ans+=3; preK = 2; } else if(s[i]>='d'&&s[i]<='f') { if(preK==3) ans+=2; if(s[i]=='d') ans++; else if(s[i]=='e') ans +=2; else ans+=3; preK = 3; } else if(s[i]>='g'&&s[i]<='i') { if(preK==4) ans+=2; if(s[i]=='g') ans++; else if(s[i]=='h') ans +=2; else ans+=3; preK = 4; } else if(s[i]>='j'&&s[i]<='l') { if(preK==5) ans+=2; if(s[i]=='j') ans++; else if(s[i]=='k') ans +=2; else ans+=3; preK = 5; } else if(s[i]>='m'&&s[i]<='o') { if(preK==6) ans+=2; if(s[i]=='m') ans++; else if(s[i]=='n') ans +=2; else ans+=3; preK = 6; } else if(s[i]>='p'&&s[i]<='s') { if(preK==7) ans+=2; if(s[i]=='p') ans++; else if(s[i]=='q') ans +=2; else if(s[i]=='r') ans +=3; else ans+=4; preK = 7; } else if(s[i]>='t'&&s[i]<='v') { if(preK==8) ans+=2; if(s[i]=='t') ans++; else if(s[i]=='u') ans +=2; else ans+=3; preK = 8; } else { if(preK==9) ans+=2; if(s[i]=='w') ans++; else if(s[i]=='x') ans +=2; else if(s[i]=='y') ans +=3; else ans+=4; preK = 9; } } return ans; }
|