一、题目
给定一个字符串 S
和一个字符 C
。返回一个代表字符串 S
中每个字符到字符串 S
中的字符 C
的最短距离的数组。
示例 1:
输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
说明:
- 字符串
S
的长度范围为[1, 10000]
。 C
是一个单字符,且保证是字符串S
里的字符。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;
}
};