1. 程式人生 > >Java之手機鍵盤

Java之手機鍵盤

Problem Description
大家應該都見過那種九鍵的手機鍵盤,鍵盤上各字母的分佈如下圖所示。

當我們用這種鍵盤輸入字母的時候,對於有些字母,往往會需要按多次鍵才能輸入。

比如:a, b, c 都在“2”鍵上,輸入 a 只需要按一次,而輸入 c 需要連續按三次。

連續輸入多個字母的規則如下:

1、如果前後兩個字母不在同一個按鍵上,則可在輸入前一個字母之後直接輸入下一個字母,如:ad 需要按兩次鍵盤,kz 需要按 6 次。

2、如果前後兩個字母在同一個按鍵上,則輸入完前一個字母之後需要等待一段時間才能輸入下一個字母,如 ac,在輸入完 a 之後,需要等一會兒才能輸入 c。

現在假設每按一次鍵盤需要花費一個時間段,等待時間需要花費兩個時間段。

現在給出一串只包含小寫英文字母的字串,計算出輸入它所需要花費的時間。

Input
 
輸入包含多組測試資料,對於每組測試資料:

輸入為一行只包含小寫字母的字串,字串長度不超過100。

Output
 
對於每組測試資料,輸出需要花費的時間。

Sample Input
bob
www
Sample Output
7
7
tip:敲到手指發抖……-……


import java.util.Scanner;
public class Main {
	public static int f(char a) {
		if(a >= 'a' && a <= 'c')
			return 2;
		else if(a >= 'd' && a <= 'f')
			return 3;
		else if(a >= 'g' && a <= 'i')
			return 4;
		else if(a >= 'j' && a <= 'l')
			return 5;
		else if(a >= 'm' && a <= 'o')
			return 6;
		else if(a >= 'p' && a <= 's')
			return 7;
		else if(a >= 't' && a <= 'v')
			return 8;
		else
			return 9;
	}
	
	public static int get_time(char a) {
		int flag = 0;
		if(a == 'a' || a == 'd' || a == 'g' || a == 'm' || a == 'p' || a == 't' || a == 'w' || a == 'j')
			flag = 1;
		else if(a == 'b' || a == 'e' || a == 'h' || a == 'k' || a == 'n' || a == 'q' || a == 'u' || a == 'x')
			flag = 2;
		else if(a == 'c' || a == 'f' || a == 'i' || a == 'l' || a == 'o' || a == 'r' || a == 'v' || a == 'y')
			flag = 3;
		else if(a == 's' || a == 'z')
			flag = 4;
		return flag;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String str = sc.nextLine();
			char []a = str.toCharArray();
			int sum = 0;
			for(int i = 0; i < str.length(); i++) {
				sum += get_time(a[i]);
			}
			for(int i = 1; i < str.length(); i++) {
				if(f(a[i]) == f(a[i - 1])) {
					sum += 2;
				}
			}
			System.out.println(sum);
		}
		sc.close();
	}
	
}