【Java算法 17-1】面试题 01.09. 字符串轮转 + 面试题 01.08. 零矩阵

103 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 天,点击查看活动详情


题目、面试题 01.09. 字符串轮转

原题链接:面试题 01.09. 字符串轮转

题目描述

字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。

/

示例1:

输入:s1 = "waterbottle", s2 = "erbottlewat"

输出:True

/

示例2:

输入:s1 = "aa", s2 = "aba"

输出:False

解题思路

这道题有些一言难尽的味道,我们借助API,直接无脑完成; 将两个s1字符串拼接起来,只要s2是其字串,那么必定就是轮转而来的...

提交代码

class Solution {
    public boolean isFlipedString(String s1, String s2) {
        int len1 = s1.length();
        int len2 = s2.length();

        //长度不同,不可能是轮转的来的
        if(len1 != len2) return false;

        //两个s1字符串拼接起来,若s2是其子串,说明是轮转得来的
        return (s1+s1).contains(s2);

    }
}

提交结果

在这里插入图片描述



题目、面试题 01.08. 零矩阵

原题链接:面试题 01.08. 零矩阵

题目描述

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。

/

示例 1:

输入:

[

[1,1,1],

[1,0,1],

[1,1,1]

]

输出:

[ [1,0,1],

[0,0,0],

[1,0,1]

]

/

示例 2:

输入:

[

[0,1,2,0],

[3,4,5,2],

[1,3,1,5]

]

输出:

[

[0,0,0,0],

[0,4,5,0],

[0,3,1,0]

]

解题思路

题目要求我们将原矩阵中,出现 元素0 的行与列都用元素0 填充。

如果我们直接在遍历的过程中填充,就会改变原始的矩阵,导致之后遍历到的 元素0 可能不属于原始的矩阵,而是前面填充得来的,这样就得不到想要的结果了。

所以这时候我们需要另外准备两个数组,分别代表需要填充 元素0 的行和列,我们遍历整个原始矩阵,当遇到 0,就将这个 元素0 所在矩阵中的行和列做标记。

当我们遍历完整个矩阵的元素后,也就知道了所有 元素0 出现的位置,只需要再遍历一次,当遍历到的元素 位置在被标记了的行或者列中,就使用0填充给。

整个矩阵遍历完,也就完成了零矩阵。

提交代码

class Solution {
    public void setZeroes(int[][] matrix) {
        int row = matrix.length;      //记录矩阵行数
        int coll = matrix[0].length;  //记录矩阵列数

        int[] R = new int[row];       //用于标记出现0的行
        int[] C = new int[coll];      //用于标记出现0的列

        for(int i = 0;i < row;++i){
            for(int j = 0;j < coll;++j){//遍历整个矩阵
                if(matrix[i][j] == 0){  //遇到 0
                    R[i] = 1;           //标记0出现的行和列
                    C[j] = 1;
                }
            }
        }

        for(int i = 0;i < row;++i){
            for(int j = 0;j < coll;++j){    //第二次遍历矩阵
                if(R[i] == 1 || C[j] == 1){ //将标记了的行和列里面的元素用0填充
                    matrix[i][j] = 0;
                }
            }
        }

    }
}

提交结果

在这里插入图片描述