Leetcode——821.字符的最短距离——题解+代码实现

一、题目


给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。

示例 1:

输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]

说明:

  1. 字符串 S 的长度范围为 [1, 10000]
  2. C 是一个单字符,且保证是字符串 S 里的字符。
  3. S 和 C 中的所有字母均为小写字母。

二、题解思路


  • 题解思路:先将字符C在字符串S中的所有位置记录在数组中,然后遍历S中的每个字符,计算每个字符的位置坐标与这些S位置坐标的差值的绝对值,选取绝对值的最小值作为结果存入到返回数组中。

三、代码实现


  • C++语言实现
class Solution {
public:
    vector<int> shortestToChar(string S, char C) 
    {
        vector<int> nums1;
        vector<int> nums2;
        int size_1 = S.size();
        for(int i = 0;i<size_1;i++)      //记录C在S字符串中的各个位置
        {
            if(S[i]==C)
                nums1.push_back(i);
        }
        int size_2 = nums1.size();        //数组nums1中元素的个数
        for(int j= 0;j<size_1;j++)        //遍历S,求解每个字符离C的最小距离,将加过存入到nums2中
        {
            int number_min = 100000;      //因为S的长度最大是10000,因为我们把每个字符离C的最下距离设为100000
            for(int k=0;k<size_2;k++)
            {
                int temp = nums1[k]-j;     //位置相减
                if(abs(temp)<number_min)   //abs()为取绝对值
                    number_min = abs(temp);
            }
            nums2.push_back(number_min);
        }
        return nums2;
    }
};

猜你喜欢

转载自blog.csdn.net/gaoyu1253401563/article/details/89891303