#include<iostream>
#include<algorithm>
#include<vector>
#include<utility>
#include<string>
using namespace std;

int logo[26]={1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,8};//标记每个小写字母在哪个键上
int tim[26]= {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};//每个字母需要按键的次数 


int main(){
	//freopen("G:\\in.txt","r",stdin);
	//freopen("G:\\out.txt","w",stdout);
	string s;
	while(cin>>s){
		int sum[s.size()];
		
		for(int i=0;i<s.size();i++){
			sum[i]=0;
			if(i)sum[i]+=sum[i-1];
			if(i-1>=0){
				if(logo[s[i-1]-'a']==logo[s[i]-'a'])
				{
				 sum[i]+=2;  //前一个是同类 
				}
				else if(tim[s[i-1]-'a']==1){  //前一个不是同类 且前一个按键之用1个时间 
				//则需要看前两个  当有前两个的时候  且倒数第二个  比倒数第一个之间 没有间隔 防止ajaj 的情况
					if(i-2>=0&&logo[s[i-2]-'a']==logo[s[i]-'a']&&sum[i-2]-sum[i-1]==0)   sum[i]+=1; 
				}
			}
			sum[i]+=tim[s[i]-'a']; 
		}
		cout<<sum[s.size()-1]<<endl;
	}
	//fclose(stdin);
	//fclose(stdout);
}

这个题目还是要注意一下,一开始没注意到 ajaj 这种情况

除此之外 看一下前一个 、前两个的状态,记录一下时间即可