首先要找出数组中有多少个有效的字符串,然后根据这个个数,创建一个稀疏数组,数组的大小为有效字符串个数加一。加一的原因是要多一行存储原数组有多少行,以及有效字符串的个数。
分析图如下:
image.png
row表示所在的行,value表示所在行的值,即字符串。
代码如下:

class Solution {
    public int findString(String[] words, String s) {
        //遍历数组,求出有效字符串的个数
        int count = 0; //记录有效字符串的个数
        boolean flag = false; //标志位,是否找到给定的字符串
        int index = -1; //记录索引位置
        for(int i = 0; i < words.length; i++){
            if(words.length != 0){
                count++;
            }
        }
        //创建稀疏数组
        String[][] str = new String[count+1][2];
        str[0][0] = String.valueOf(words.length);
        str[0][1] = String.valueOf(count);

        //将有效字符串存到稀疏数组中
        int num = 0; //添加有效字符串的下标
        for (int i = 0; i < words.length; i++) {
            if (words.length != 0) {
                num++;
                str[num][0] = String.valueOf(i); //保存原数组索引
                str[num][1] = words[i]; //保存原数组索引i对应的值
            }
        }

        //遍历稀疏数组
        for (int i = 1; i < count+1; i++) {
            if (s.equals(str[i][1])) {
                flag = true;
                index = Integer.valueOf(str[i][0]);
                break;
            }
        }

        //判断是否找到,没有找到则返回-1
        if (flag) {
           return index;
        } else {
            return -1;
        }
    }
}

韩老师的视频

Q.E.D.


热爱生活,热爱程序