1
头图

Zero title: Algorithm (leetode, with mind map + all solutions) of 300 questions (2124) Check if all A are before B

a topic description

题目描述
题目描述

Two solutions overview (mind map)

思维导图

All three solutions

1 Scenario 1

1) Code:

// 方案1 “排序、对比法”。

// 思路:
// 1)将 s 按字母升序排列,得到字符串 sSort 。
// 2)返回结果 sSort === s 。
var checkString = function(s) {
    // 1)将 s 按字母升序排列,得到字符串 sSort 。
    const sSort = s.split('').sort((a, b) => a.localeCompare(b)).join('');
    
    // 2)返回结果 sSort === s 。
    return sSort === s;
};

2 Option 2

1) Code:

// 方案2 “双指针法”。

// 思路:
// 1)状态初始化,left = 0, right = l - 1, resBool = true 。

// 2)当 left < right 时,下标 left、right 不断往中间靠。
// 2.1)若 leftVal(即 s[left]) 等于 'a',则 下标left 往后走。
// 2.2)若 rightVal(即 s[right]) 等于 'b',则 下标right 往前走。
// 2.3)若 leftVal 不等于 'a' 且 rightVal 不等于 'b',则 resBool 置为 false,退出 while 循环。

// 3)返回结果 resBool 。
var checkString = function(s) {
    // 1)状态初始化,left = 0, right = l - 1, resBool = true 。
    const l = s.length;
    let left = 0,
        right = l - 1,
        resBool = true;
    
    // 2)当 left < right 时,下标 left、right 不断往中间走。
    while (left < right) {
        const leftVal = s[left],
            rightVal = s[right];
        
        // 2.1)若 leftVal(即 s[left]) 等于 'a',则 下标left 往后走。
        if (leftVal === 'a') {
            left++;
        }
        // 2.2)若 rightVal(即 s[right]) 等于 'b',则 下标right 往前走。
        if (rightVal === 'b') {
            right--;
        }
        // 2.3)若 leftVal 不等于 'a' 且 rightVal 不等于 'b',则 resBool 置为 false,退出 while 循环。
        if (leftVal !== 'a' && rightVal !== 'b') {
            resBool = false;
            break;
        }
    }

    // 3)返回结果 resBool 。
    return resBool;
}

3 Scenario 3

1) Code:

// 方案3 “问题等价 - 转化法”。

// 技巧:通过 进一步揣摩题目意思,可以将原问题 转换成 “给定的字符串中 是否不存在 'ba'子串 ” 。
var checkString = function(s) {
    return s.includes('ba') === false;
}

4 Option 4

1) Code:

// 方案4 “问题等价 - 转化法(正则实现,初步看、速度会比方案3快好些~)”。
// 技巧:通过 进一步揣摩题目意思,可以将原问题 转换成 “给定的字符串中 是否不存在 'ba'子串 ” 。
var checkString = function(s) {
    const reg = /ba/;

    return reg.test(s) === false;
}

Four resource sharing & more

1 Historical Articles - Overview

历史文章 - 总览

刷题进度 - LeetCode:430 / 2520 、《剑指offer》:66 / 66

2 Introduction to bloggers

Code Farmer Sanshao, a blogger dedicated to writing minimalist but complete problem solutions (algorithm ).
Focus on , multiple solutions for one question, structured thinking , welcome to brush through LeetCode~


码农三少
54 声望8 粉丝