C++程序 查找给定数字字符串所需的最小循环旋转次数,避免给定字符串集合

C++程序 查找给定数字字符串所需的最小循环旋转次数,避免给定字符串集合

在程序开发中,我们经常需要对字符串进行操作。本篇文章将分享一个C++程序,它可以查找给定数字字符串所需的最小循环旋转次数,并避免给定的字符串集合。

代码实现

以下是程序的实现过程:

  1. 编写一个函数,用于检查两个字符串是否相等。
    bool equal(std::string s1, std::string s2) { 
       return (s1.size() == s2.size()) && (s1 + s1).find(s2) != std::string::npos;
    }
    

    函数中使用了std::string类的方法,size()返回字符串长度,+表示字符串拼接,find()可以在一个字符串中查找子串,它返回第一次出现的位置或std::string::npos

    它的实现原理是比较两个字符串是否相等。由于是循环旋转,我们可以把s1拼接一遍再查找s2,如果找不到,说明s1s2是不同的串。

  2. 接下来是求出最小循环旋转次数的函数。

    int min_rotation(std::vector<std::string> strings, std::string target) {
       int n = strings.size();
       int left = 0, right = n - 1;
       while (left < right) {
           int mid = (left + right) / 2;
           if (strings[mid] < target)
               left = mid + 1;
           else
               right = mid;
       }
       if (equal(strings[left], target))
           return left;
       else
           return -1;
    }
    

    函数中使用了二分查找法。首先将字符串数组进行排序,然后用二分法查找目标字符串的索引。接下来,我们检查该字符串是否等于目标字符串。如果是,我们就找到了目标字符串在数组中的索引,直接返回即可。否则,返回-1。

  3. 最后是主函数进行测试。

    int main() {
       std::vector<std::string> strings{"12345", "34512", "51234"};
       std::string target{"34512"};
       int pos = min_rotation(strings, target);
       if (pos != -1)
           std::cout << "The minimal rotation needed is " << pos << "." << std::endl;
       else
           std::cout << "The target string is not in the array." << std::endl;
       return 0;
    }
    

    在主函数中,我们定义了一个字符串数组string和一个目标字符串target。接下来,我们调用min_rotation函数得到目标字符串的最小旋转次数,然后根据返回值判断结果是在数组中还是不存在。

结论

本文分享了一个C++程序,用于查找给定数字字符串所需的最小循环旋转次数,避免给定字符串集合。我们可以根据该程序实现一些字符串相关的算法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例