C++程序查找字符的最短距离


给定一个字符串'a'和一个字符'char',任务是打印'char'到给定字符串中每个字符的距离。距离数组的大小与字符串的大小相同,因为我们必须找到字符在给定字符串中每个字符的距离。

例如

输入-1

a = “tutorialspoint”

char = “o”

输出:

[ 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3]

解释:在给定的字符串中,字符'o'到给定字符串中每个字符的距离为[3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3]。

输入-2

a = “programmer”

char = “r”

输出

[1, 0, 1, 2, 0, 1, 2, 3, 4, 0 ]

解释:在给定的字符串中,'r'到给定字符串中每个字符的距离为[1, 0, 1, 2, 0, 1, 2, 3, 4, 0]。

解决此问题的方法

解决此问题的暴力方法是在字符串中找到给定字符的位置并存储在数组中。现在遍历整个字符串以及位置数组以找到字符在给定字符串中的最小距离。

  • 将字符串和字符'char'作为输入。
  • 函数distanceTochar(string a, char ch)以字符串和字符作为输入,并打印给定字符在给定字符串中每个字符的距离。
  • 遍历字符串'a'并将给定字符的位置存储到向量中。
  • 现在遍历字符串和位置数组并计算字符串中字符的距离。
  • 打印位置数组。

示例

在线演示

#include<bits/stdc++.h>
using namespace std;
void shortestToChar(string a, char C) {
   vector < int > pos, dist;
   for (int i = 0; i < a.size(); i++) {
      if (a[i] == C)
         pos.push_back(i);
   }
   for (int i = 0; i < a.size(); i++) {
      int mn = INT_MAX;
      for (int j = 0; j < pos.size(); j++) {
         mn = min(mn, abs(pos[j] - i));
      }
      dist.push_back(mn);
   }
   for (auto i: dist) {
      cout << i << " ";
   }
}
int main() {
   string a = "tutorialspoint";
   char ch {
      'o'
   };
   shortestToChar(a, ch);
}

运行以上代码将生成以下输出:

输出

3 2 1 0 1 2 3 3 2 1 0 1 2 3

字符串“tutorialspoint”中的字符'o'出现在索引3和索引10处。因此,如果我们计算其与其前后字符的最近距离,我们将得到距离为[3 2 1 0 1 2 3 3 2 1 0 1 2 3]。

更新于: 2021年2月23日

486 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告