华为OD机试真题 JavaScript 实现完美走位2023 Q1 | 100分

Posted MISAYAONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为OD机试真题 JavaScript 实现完美走位2023 Q1 | 100分相关的知识,希望对你有一定的参考价值。

   所有题目均有四种语言实现。C++ 实现目录Python实现目录Java实现目录JavaScript实现目录

题目

一、题目

输入一个长度为4的倍数的字符串,字符串中仅包含WASD四个字母。

将这个字符串中的连续子串用同等长度的仅包含WASD的字符串替换,如果替换后整个字符串中WASD四个字母出现的频数相同,那么我们称替换后的字符串是“完美走位”。

求子串的最小长度。

如果输入字符串已经平衡则输出0。

二、输入
一行字符表示给定的字符串s

数据范围:
1<=n<=10^5且n是4的倍数,字符串中仅包含WASD四个字母。

三、输出
一个整数表示答案

四、样例输入输出

示例1:

输入:
WASDAASD

输出:
1

说明:
将第二个A替换为W,即可得到完美走位 。

示例2:

输入:
AAAA

输出:
3

说明:
将其中三个连续的A替换为WSD,即可得到完美走位  

思路

1:先用一个map统计出字符串所有的字符个数,然后先看是否”完美“。

2:再利用经典的尺取法
  从左往右移动区间,当满足条件时,左端点右移,缩小区间,当不满足条件时,右端点右移,扩大区间,这样可以找到每个满足条件的区间,从而可以找到最小区间。
  记录不包含该区间时 WASD 的数量,先判断能否通过替换区间内的元素使 WASD 数量一致,再判断剩余位置是否是4的倍数。

JS输入输出

javascript 本身有两种模式:V8 和 Node,两种模式在输入上略有不同。

Node:

let readline = require("readline");
 
const rl = readline.createInterface(
  input: process.stdin,
  output: process.stdout,
);

rl.on('line', function(line)
    // line表示的就是输入的一行
    let lines = line.split(' ').map(Number);
);

V8:

//假设输入为:
4
5
1 2

// readline() 就表示输入的一行,和python中的 input()函数用法基本一致
let n = readline().split('').map(item=>parseInt(item));  // 4
let k = readline().split(' ').map(item=>parseInt(item)); // 5
let [nums] = readline().split(' ').map(item=>parseInt(item)); // 1 2

具体我也是参考了网上的博主的文章:ACM模式下JavaScript(js)的输入输出 V8 Node_我先润了的博客-CSDN博客

ACM格式javascript 输入输出 - 衣囧~ - 博客园 (cnblogs.com)

不熟悉的可以自行查阅。

这里给出这位博主的总结:

        node.js=V8+内置基本模块,相当于java中的JRE=JVM+java标准库

        node就是带有能操作IO和网络库的V8引擎,提供了很多可调用的API使得JavaScript能够读写文件,网络请求,系统信息等操作。对V8引擎进行了封装,执行JavaScript的速度更快,性能更好。

Code

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
var char_count = W: 0, A: 0, S: 0, D: 0,;

function main(input_str) 
    for (let char of input_str) 
        char_count[char]+=1
    
 
    let not_balance_count = 0
    let is_balance = true
    for (let c in char_count) 
        //大于平均值
        if (char_count[c] > input_str.length / 4) 
            is_balance = false;
            char_count[c] -= input_str.length / 4
            not_balance_count += char_count[c]
         else 
            delete char_count[c]
        
    
    
    if (is_balance) 
        console.log(0)
     else 
        console.log(get_min_length(input_str, not_balance_count))
    


function get_min_length(str, not_balance_count) 
    let left = 0
    let right = 0
    let result = str.length-1;
    while (right < str.length) 
        var temp_char = str[right];
    
        if (char_count[temp_char]-- > 0) 
            not_balance_count--;
        
    
        while (not_balance_count === 0) 
            result = Math.min(result, right - left + 1);
        
            const temp_char_1 = str[left];
            if (char_count[temp_char_1]++ >= 0) 
                not_balance_count++;
            
        
            left++;
        
    
        right++;
    
    
    return result;

 
main("AAAA")

要求

时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld

语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3), 
php(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), mysql(8.0)

以上是关于华为OD机试真题 JavaScript 实现完美走位2023 Q1 | 100分的主要内容,如果未能解决你的问题,请参考以下文章

100%通过率华为OD机试真题 C 实现完美走位2022.11 Q4新题

华为OD机试真题Java实现得完美走位真题+解题思路+代码(2022&2023)

华为OD机试(C语言)真题

华为OD机试(C语言)真题

华为OD机试题,用 Java 解获得完美走位问题

华为OD机试真题 2023题库更新中。。。