Leecode刷题C语言之按键变更的次数

执行结果:通过

执行用时和内存消耗如下:

int countKeyChanges(char* s) {
    int count=0,i=0;
    while(s[i]!='\0'){
        if((s[i]!=s[i+1])&&(s[i]!=(s[i+1]+32))&&(s[i]!=(s[i+1]-32))&&s[i+1]!=0)count++;
        i++;
    }
    return count;
}

解题思路:

  1. 初始化变量
    • count:用于记录键变化的次数,初始化为0。
    • i:用于遍历字符串的索引,初始化为0。
  2. 遍历字符串
    • 使用 while 循环遍历字符串,直到遇到字符串的结束符 \0
  3. 检查相邻字符
    • 在每次循环中,检查当前字符 s[i] 和下一个字符 s[i+1] 是否满足以下条件之一:
      • s[i] != s[i+1]:两个字符不相同。
      • s[i] != (s[i+1] + 32):当前字符不是下一个字符的小写形式(假设ASCII码,小写字母比对应大写字母大32)。
      • s[i] != (s[i+1] - 32):当前字符不是下一个字符的大写形式。
      • s[i+1] != 0:确保 s[i+1] 不是字符串结束符(虽然这个条件在 while 循环的条件中已经隐含,但这里再次检查可以避免访问未定义内存)。
    • 如果上述所有条件都不满足,说明两个字符要么相同,要么是大小写关系(例如,'A' 和 'a'),此时不计入键变化次数。
    • 如果上述任一条件满足,说明发生了键变化,将 count 增加1。
  4. 索引递增
    • 每次循环结束时,将索引 i 增加1,以移动到下一个字符。
  5. 返回结果
    • 当遍历完整个字符串后,返回 count,即总的键变化次数。

注意 :代码中有一个小细节需要注意,即 (s[i+1]!=0) 这个条件在 while 循环的条件中已经通过 s[i]!='\0' 隐含地确保了 s[i+1] 的存在(除非 s[i] 是字符串的最后一个字符),因此这个条件实际上是多余的,可以省略。

相关推荐
滴_咕噜咕噜9 分钟前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
haaaaaaarry14 分钟前
【分治法】线性时间选择问题
数据结构·算法
CS创新实验室23 分钟前
计算机考研之数据结构:P 问题和 NP 问题
数据结构·考研·算法
OTWOL1 小时前
【C++编程入门基础(一)】
c++·算法
谏君之1 小时前
C语言实现的常见算法示例
c语言·算法·排序算法
机器视觉知识推荐、就业指导2 小时前
【数字图像处理二】图像增强与空域处理
图像处理·人工智能·经验分享·算法·计算机视觉
IT猿手3 小时前
超多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
人工智能·算法·机器学习·matlab·无人机
Erik_LinX3 小时前
算法日记25:01背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
算法·深度优先
Alidme3 小时前
cs106x-lecture14(Autumn 2017)-SPL实现
c++·学习·算法·codestepbystep·cs106x
小王努力学编程3 小时前
【算法与数据结构】单调队列
数据结构·c++·学习·算法·leetcode