算法|使用特殊打字机键入单词的最少时间

力扣第59场双周赛题目

  • 刷题链接

https://leetcode-cn.com/problems/minimum-time-to-type-word-using-special-typewriter/

  • 题目描述

有一个特殊打字机,它由一个 圆盘 和一个 指针 组成, 圆盘上标有小写英文字母 ‘a’ 到 ‘z’。只有 当指针指向某个字母时,它才能被键入。指针 初始时 指向字符 ‘a’ 。
在这里插入图片描述
每一秒钟,你可以执行以下操作之一:

将指针 顺时针 或者 逆时针 移动一个字符。
键入指针 当前 指向的字符。
给你一个字符串 word ,请你返回键入 word 所表示单词的 最少秒数
示例 1:
输入:word = “abc”
输出:5
解释:
单词按如下操作键入:
花 1 秒键入字符 ‘a’ in 1 ,因为指针初始指向 ‘a’ ,故不需移动指针。
花 1 秒将指针顺时针移到 ‘b’ 。
花 1 秒键入字符 ‘b’ 。
花 1 秒将指针顺时针移到 ‘c’ 。
花 1 秒键入字符 ‘c’ 。

  • 分析

相邻两字母间的距离可通过字母间的ASCII码做差得到,因为转盘是圆形的,所以每次都要判断如何作差才能获得最短距离,例外不要忘记相邻两字母相等的情况。

  • 参考解题
class Solution {
    public int minTimeToType(String word) {
        
          int flag = 0;
        
          char[] arr = word.toCharArray();
       
           if(arr[0] == 'a'){
                flag = flag + 1; 
            }
            if(arr[0] - 'a' > 0){
                flag += Math.min( (arr[0] - 'a'),(26 - (arr[0] - 'a')) )+ 1;
            }
            
             if(arr[0] - 'a' < 0){
                flag += Math.min( ('a' - arr[0]),(26 - ('a' - arr[0])) )+ 1;
            }
        
        for( int i = 1; i < arr.length ; ++i){
                if((arr[i] - arr [i-1]) > 0){
                flag += Math.min( (arr[i] - arr [i-1]),(26 - (arr[i] - arr [i-1])) )+ 1; 
            }
              if((arr[i] - arr [i-1]) < 0){
                flag += Math.min( (arr[i-1] - arr [i]),(26 - (arr[i-1] - arr [i])) )+ 1; 
            }
               if((arr[i] - arr [i-1]) == 0){
                flag += 1; 
            }
        }
        
        return flag;
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值