审题:
本题需要我们根据字符串数组strs的内容,查找str1和str2的最小距离
思路:
方法一:双指针
我们可以利用pos1负责指向str1的位置,pos2负责指向str2的位置,且由于str1与str2在strs中不是唯一的数据,所以我们在遍历的过程中还需要不断更新两个指针,以搜索出所有可能的最小距离。
解题:
(1)变量创建与初始化
由于数据最大可能是1e5,所以我们先创建一个一定满足容量的字符串数组。
mindistance表示最短距离,初始设置为1e6是因为两个字符串最大距离只有可能是1e5,若后续没有更新mindistance还可以用它作为判断是否str1和str2都在strs中的条件
(2)部分数据录入
由于我们一开始的数组创建的容量过大了,所以这里我们为了减少空间浪费把数据量缩小回来。
特殊处理:题目中说如果str1与str2有任意一个为空就要打印-1,然后结束程序
(3)核心代码
疑问:为什么我们可以直接更新pos1和pos2?这样不会导致漏情况吗?
不会,因为我们保证了每次进行距离计算都是局部的最短距离计算,而我们又对整个数组都进行了遍历更新,所以局部最短就可以升为全局最短
特殊处理:如果mindistance没有更新过,说明数组中有一个字符串是不存在的,输出-1并退出程序
补充:abs表示参数的绝对值
使用方式:abs(value)
头文件:cstdlib