C++程序:查找电话号码中的国家代码长度


假设我们有一个包含n个数字字符串的字符串列表S。Amal在一个城市有n个朋友。Amal知道所有朋友的电话号码:它们存储在S中。S中的所有字符串长度相同。Amal需要找出城市的区号。他假设城市的区号是所有朋友电话号码的最长公共前缀。我们需要找到城市区号的长度。

问题类别

为了解决这个问题,我们需要操作字符串。编程语言中的字符串是存储在特定数组类型中的字符流。几种语言将字符串指定为特定数据类型(例如Java、C++、Python);而其他几种语言将字符串指定为字符数组(例如C)。字符串在编程中非常重要,因为它们通常是各种应用程序中首选的数据类型,并用作输入和输出的数据类型。有各种字符串操作,例如字符串搜索、子串生成、字符串剥离操作、字符串转换操作、字符串替换操作、字符串反转操作等等。查看下面的链接,了解如何在C/C++中使用字符串。

https://tutorialspoint.com/cplusplus/cpp_strings.htm

https://tutorialspoint.com/cprogramming/c_strings.htm

因此,如果我们问题的输入类似于S = ["00209", "00219", "00999", "00909"],则输出将为2,因为区号是“00”。

步骤

为了解决这个问题,我们将遵循以下步骤:

n := size of S
ans := 0
m := size of S[0]
for initialize i := 0, when i < m, update (increase i by 1), do:
   c := S[0, i]
   for initialize j := 0, when j < n, update (increase j by 1), do:
      if S[j, i] is not equal to c, then:
         return ans
   (increase ans by 1)
return ans

示例

让我们看看下面的实现来更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(vector<string> S){
   int n = S.size();
   int ans = 0;
   int m = S[0].size();
   for (int i = 0; i < m; i++){
      char c = S[0][i];
      for (int j = 0; j < n; j++){
         if (S[j][i] != c){
            return ans;
         }
      }
      ans++;
   }
   return ans;
}
int main(){
   vector<string> S = { "00209", "00219", "00999", "00909" };
   cout << solve(S) << endl;
}

输入

{ "00209", "00219", "00999", "00909" }

输出

2

更新于:2022年4月7日

470 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.