1. 程式人生 > >【java練習】SDUT 2618 手機鍵盤

【java練習】SDUT 2618 手機鍵盤

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
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		while (s.hasNext()) {
			String str[] = { new String("abc"), new String("def"), new String("ghi"), new String("jkl"),
					new String("mno"), new String("pqrs"), new String("tuv"), new String("wxyz") };
			String v = s.nextLine();
			char[] a = v.toCharArray();
			int n = v.length();
			int sum = 0, f = -1;
			for (int i = 0; i < n; i++)
				for (int j = 0; j < 8; j++)
					for (int k = 0; k < str[j].length(); k++)
//這裡!要關注有的鍵盤管3個字母,有的是四個,所以k不能設定成定值。
						if (a[i] == str[j].charAt(k)) 
						{
							sum += k + 1;
							if (f == j)
								sum += 2;
							f = j;
							break;
						}
			System.out.println(sum);
		}
		s.close();
	}
}