leetcode-面试题17.11.单词距离

题目链接(简单得不像中等题)

思路一:遍历数组,对第一个单词的每一个位置,寻找相隔最近的第二个单词,然后不断更新最短距离值。

思路二:思路一在时间复杂度的考量上不够合理,因此想到设置两个int数组,分别记录第一个单词和第二个单词出现的每个位置,再求两数组元素之间相差的最小值。这种解法虽然只要遍历两次数组,时间复杂度从O(N^2)降到O(N),但由于两个int数组的存在,导致了O(N)的空间复杂度,所以显然也不够合理。

思路三:双指针,分别记录两个单词的出现位置,然后计算距离并不断优化取最小值。

int min(int a,int b){
    return a<b?a:b;
}

int findClosest(char** words, int wordsSize, char* word1, char* word2){
    int w1=0,w2=0; //记录w1,w2下标
    for(;w1<wordsSize;w1++){
        if(strcmp(words[w1],word1)==0){
            break;
        }
    }
     for(;w2<wordsSize;w2++){
        if(strcmp(words[w2],word2)==0){
            break;
        }
    }
    int dis=abs(w1-w2); //记录距离,不断优化,取最小值
    for(int i=min(w1,w2);i<wordsSize;i++){
        if(strcmp(words[i],word1)==0) w1=i;
        else if(strcmp(words[i],word2)==0) w2=i;
        else;
        if(dis>abs(w1-w2)) dis=abs(w1-w2); //取绝对值
    }
    return dis;
}

记录一下出现的几个问题:
1、C语言中,将字符串常量 赋值给指针时 , 首先去全局变量区的常量区询该字符串常量是否存在 :如果存在 , 直接使用该 字符串常量地址 赋值给 char* 指针 ;如果不存在 , 直接在常量区 创建一个新的字符串 , 然后将地址 赋值给 char* 指针
代码验证一下这个结论:

#include<stdio.h>
#include<string.h>
int main(){
	char* a="123";
	char* b="123";
	printf("a:%d\n",a);
	printf("b:%d\n",b);
	if(a==b) printf("a==b:true\n");
	if(strcmp(a,b)==0) printf("strcmp:true\n");
	return 0;
}

输出长这样:


2、取绝对值:abs()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值