C练题笔记之:Leetcode-243. 最短单词距离

    科技2022-07-21  90

    题目:

    给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离。

    示例: 假设 words = ["practice", "makes", "perfect", "coding", "makes"]

    输入: word1 = “coding”, word2 = “practice” 输出: 3 输入: word1 = "makes", word2 = "coding" 输出: 1 注意: 你可以假设 word1 不等于 word2, 并且 word1 和 word2 都在列表里。

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/shortest-word-distance 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    结果:

    解题思路:

    1,将包含words1单词的下标记录在nums1中,同样将words2单词的下标记录在nums2中。

    2,循环找出nums1和nums2中下标距离最短的就是题目的要求。

    3,第一次循环结束后,可能是其中一个nums到最后了,所以只要判断最后有没有可能距离更短,如果有可能继续循环。没可能则返回了。

    代码:

    int shortestDistance(char ** words, int wordsSize, char * word1, char * word2){ int nums1[100] = {}; int nums2[100] = {}; int index1 = 0; int index2 = 0; int i, j; for(i = 0; i < wordsSize; i++) { if(strcmp(words[i], word1) == 0) { nums1[index1++] = i; } if(strcmp(words[i], word2) == 0) { nums2[index2++] = i; } } int count = abs(nums1[0] - nums2[0]); for(i = 0, j = 0; i < index1 && j < index2; ) { count = abs(nums1[i] - nums2[j]) < count ? abs(nums1[i] - nums2[j]) : count; if(nums1[i] < nums2[j]) { i++; } else { j++; } } if(i == index1 && j < index2 && nums1[i-1] > nums2[j]) { while(j < index2 && nums1[i-1] > nums2[j]) { count = abs(nums1[i-1] - nums2[j]); } } if(i < index1 && j == index2 && nums1[i] < nums2[j-1]) { while(i < index1 && nums1[i] < nums2[j - 1]) { count = nums2[j - 1] - nums1[i]; } } return count; }

     

    Processed: 0.010, SQL: 8