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;
}

运行结果

LeetCode刷题笔记 - 859. 亲密字符串_第1张图片

题目

LeetCode刷题笔记 - 859. 亲密字符串_第2张图片

注意点

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

你可能感兴趣的:(leetcode,笔记,算法)