学校组织活动,将学生排成一个矩形方阵。请在矩形方证中找到最大的位置相连的男生数量。

这个相连位置在一个直线上,方向可以是水平的,垂直的、呈对角线的或着反对角线的。

注:学生个数不会超过10000

输入描述:

输入的第一行为矩形的行数和列数,接下来的n行为矩阵元素,元素间用“,”分隔

输出描述:

输出一个整数,表示矩阵中最长的位置相连的男生个数。

备注:

示例1:

输入:

3,4

F,M,M,F

F,M,M,F

F,F,F,M

输出 3

// female/male ???这题应该是这个意思 M就是男吧 反对角线咋算,求大神指点
let n = 3
let k = 4
let maxLen = 0
let arr = [
    ['F','M','M','F'],
    ['F','M','M','F'],
    ['M','M','F','M']
]
// 横的
for(let i of arr){
    maxLen = Math.max(sameArr(i),maxLen)
}
// // 竖的
let nums  = arr[0].length
for(let j=0;j<nums;j++){
    let newArr = []
    for(let i of arr){
        newArr.push(i[j])
    }
    maxLen = Math.max(sameArr(newArr),maxLen)
}
// 对角
let record = new Map()
for(let i=0;i<arr.length;i++){
    for(let j=0;j<nums;j++){
        let key = j+i
        if (!record.has(key)){
            record.set(key, [])
        }
        record.get(key).push(arr[i][j])
    }
}
for(let [i,nums] of record.entries()){
    maxLen = Math.max(sameArr([...nums]),maxLen)
}
console.log(maxLen)
//计算一维数组男生相连最大值
function sameArr(arr){
    let maxLen = 0
    let left = 0
    let right = 0
    while (right<arr.length) {
        right++
        if(arr[left]===arr[right] && arr[right] === 'M'){
            maxLen = Math.max(right - left + 1,maxLen)
        }else {
            left = right
        }
    }
    return maxLen
}