LeetCode刷题笔记 - 859. 亲密字符串

LeetCode刷题笔记 - 859. 亲密字符串

bool buddyStrings(char* s, char* goal) {
    char d = 0;
    char gd = 0;
    int pair = 0;
    int epair = 0;
    char map[256] = {0};

    if (strlen(s) != strlen(goal)) {
        return false;
    }

    while (*s != '\0') {
        if (*s != *goal) {
            if (d == 0) {
                d = *s;
                gd = *goal;
            } else {
                if (d != *goal || gd != *s) {
                    return false;
                }
                d = 0;
                gd = 0;
                pair++;
            }
        }
        map[*s]++;
        if (map[*s] > 1) {
            epair++;
            map[*s] = 0;
        }
        s++;
        goal++;
    }
    if (d != 0 || gd != 0) {
        return false;
    }
    if (pair == 0) {
        if (epair == 0) {
            return false;
        } else {
            return true;
        }
    } else {
        if (pair != 1) {
            return false;
        }
    }
    return true;
}

运行结果

在这里插入图片描述

题目

在这里插入图片描述

注意点

  1. 如果原始字符串(s)与目标字符串(goal)里,需要考虑s内的相同字符对数,最少需要大于一对才能满足条件;
  2. 需要考虑第一次遇到不同字符时,与第二次遇到不通字符时,这个4个字符分别命名为s[FIRST]goal[FIRST]s[SECOND]goal[SECOND]的关系如下:
	s[FIRST] == goal[SECOND]
	goal[FIRST] == s[SECOND]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值