一个长度不大于100的字符串,其中只有手机按键上有的小写字母
输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
bob www
7 7
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String str = in.next();//输入一串字符串
char pre_char = str.charAt(0);
int result = get_number(pre_char);
if (str.length() == 1) {
result = get_number(str.charAt(0));
System.out.println(result);
return;
}
for (int i = 1; i < str.length(); i++) {
//先判断前后两个字符是否是同一个按键
char t = str.charAt(i);
int samePlace = in_the_same_place(pre_char, t);
if (samePlace == 1) { //在不同位置
int after_num = get_number(t);
result = result + after_num;
pre_char = t;
} else {//在同一位置
int pre_num = get_number(pre_char);
int after_num = get_number(t);
result = result + after_num + 2;
pre_char = t;
}
}
System.out.println(result);
}
}
public static int get_number(char c) {
if (c == 'a' || c == 'd' || c == 'g' || c == 'j' || c == 'm' || c == 'p' ||
c == 't' || c == 'w')
return 1;
else if (c == 'b' || c == 'e' || c == 'h' || c == 'k' || c == 'n' || c == 'q' ||
c == 'u' || c == 'x')
return 2;
else if (c == 'c' || c == 'f' || c == 'i' || c == 'l' || c == 'o' || c == 'r' ||
c == 'v' || c == 'y')
return 3;
else if (c == 's' || c == 'z')
return 4;
else
return -1;
}
/**
*
* @param c1 前一个字符
* @param c2 后一个字符
* @return
*/
public static int in_the_same_place(char c1,
char c2) { //判断是否在同一个位置上
//同一位置
if ((c1 == 'a' || c1 == 'b' || c1 == 'c' ) && (c2 == 'a' || c2 == 'b' ||
c2 == 'c'))
return -1;
else if ((c1 == 'd' || c1 == 'e' || c1 == 'f') && (c2 == 'd' || c2 == 'e' ||
c2 == 'f'))
return -1;
else if ((c1 == 'g' || c1 == 'h' || c1 == 'i' ) && (c2 == 'g' || c2 == 'h' ||
c2 == 'i'))
return -1;
else if ((c1 == 'j' || c1 == 'k' || c1 == 'l') && (c2 == 'j' || c2 == 'k' ||
c2 == 'l'))
return -1;
else if ((c1 == 'm' || c1 == 'n' || c1 == 'o') && ( c2 == 'm' || c2 == 'n' ||
c2 == 'o'))
return -1;
else if ((c1 == 'p' || c1 == 'q' || c1 == 'r' || c1 == 's') && (c2 == 'p' ||
c2 == 'q' || c2 == 'r' || c2 == 's'))
return -1;
else if ((c1 == 't' || c1 == 'u' || c1 == 'v') && ( c2 == 't' || c2 == 'u' ||
c2 == 'v'))
return -1;
else if ((c1 == 'w' || c1 == 'x' || c1 == 'y' || c1 == 'z') && (c2 == 'w' ||
c2 == 'x' || c2 == 'y' || c2 == 'z'))
return -1;
else
return 1;//在不同位置
}
} import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static char[][] key = {{'a', 'b', 'c'}, {'d', 'e', 'f'}, {'g', 'h', 'i'}, {'j', 'k', 'l'}, {'m', 'n', 'o'}, {'p', 'q', 'r', 's'}, {'t', 'u', 'v'}, {'w', 'x', 'y', 'z'}};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while ((s = br.readLine()) != null) {
int re = 0;
int[] xy = new int[2];
int t = -1;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
xy = Find(c);
if (t == xy[0]) {//和上次的在一个按钮中
re += 2;
}
re += xy[1] + 1;
t = xy[0];//记录
}
System.out.println(re);
}
}
private static int[] Find(char c) {
int[] xy = new int[2];
for (int i = 0; i < key.length; i++) {
for (int j = 0; j < key[i].length; j++) {
if (key[i][j] == c) {
xy[0] = i;
xy[1] = j;
}
}
}
return xy;
}
}
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s = sc.next().trim();
int num = getPushNum(s);
System.out.println(num);
}
sc.close();
}
private static int getPushNum(String s){
if(s == null || s.length() == 0) return 0;
int[] group = new int[]{
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[] time = new int[]{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};
if(s.length() == 1){
return time[s.charAt(0) - 'a'];
}
int res = 0;
for(int i = 1; i < s.length(); i++){
int pre = s.charAt(i - 1) - 'a';
int cur = s.charAt(i) - 'a';
if(i == 1) res += time[pre];
if(group[pre] == group[cur]){
res += 2;
}
res += time[cur];
}
return res;
}
} //此方法思路为,创建String数组把按键枚举出来,利用String.indexOf()
//构造方法计算时间和判断是否在同一按键上
import java.util.Scanner;
public class Main{
//枚举按键,装入数组 public static String[] str = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
char[] ch = sc.nextLine().toCharArray(); //接收键盘输入
int times = cal(ch[0]); //用tims接收计算第一个字符所需时间段
for(int i=1;i<ch.length;i++){ //从第二个字符开始计算时间段
if(judge(ch[i-1],ch[i]) > 0){ //判断连续两个字符是否在同一按键上
times+=2; //同一按键则时间段加2
}
times =cal(ch[i])+times; //计算字符所需时间段
}
System.out.println(times); //打印最终结果
}
}
//创建cal()方法,计算按char c按键所需时间,返回index+1为按键所需时间段
public static int cal(char c){
int index = -1;
for(int i=0;i<str.length;i++){
index = str[i].indexOf(c);
if(index != -1){
return index+1;
}
} return 0;
}
//判断字符char a和字符char b是否在同一按键上,是则返回1,否则返回-1
public static int judge(char a,char b){
int i=0,j=0; //用i记录a字符的按键位置,j记录b字符的按键位置
for (; i < str.length; i++) {
if(str[i].indexOf(a) != -1){
break;
} }
for (; j < str.length; j++) {
if(str[j].indexOf(b) != -1){
break;
} }
if(i==j){ //判断a字符和b字符是否在同一按键上
return 1;
} return -1;
}
}
import java.util.Objects;
import java.util.Scanner;
/**
* Created by fhqplzj on 17-1-25 at 下午11:17.
*/
public class My3 {
private static final String positions = "22233344455566677778889999";
private static final int[] values = new int[]{
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
};
private static int process(String s) {
Objects.requireNonNull(s);
s = s.toLowerCase();
int n = s.length();
if (n == 0) {
return 0;
}
int result = values[s.charAt(0) - 'a'];
for (int i = 1; i < n; i++) {
if (positions.charAt(s.charAt(i - 1) - 'a') == positions.charAt(s.charAt(i) - 'a')) {
result += 2;
}
result += values[s.charAt(i) - 'a'];
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String s = scanner.nextLine();
System.out.println(process(s));
}
}
}