写了一下实现代码:
#include <string>
#include <iostream>
#include <stdlib.h>
#include <cassert>
using namespace std;
static int count = 0;
int strCompare(string a,const string b);
int main(){
string a1;
string a2;
cout<<"please enter two string:\n";
cin>>a1;
cin>>a2;
cout<<"the least count is "<<strCompare(a1,a2)<<"\n";
return 0;
}
int strCompare(string a,string b){
assert(a!=string(" ") && b != string(" "));
int length = a.size()-1;
if(a == b)
return count;
else{
while(a[length] == b[length])
--length;
count++;
a = a[length] + a.substr(0,length);
while(a[length] != b[length]){
count++;
a = a[length] + a.substr(0,length);
}
return strCompare(a,b.substr(0,length+1));
}
}
进入处理函数,首先判断两个字符串是否相等,如果相等就已经得到正确结果了,否则就从后面开始,首先找到第一个不相等的字符,则需要移动第一个字符串此位置的字符到下标0处,则count需要加1,这时a就变成了a[length]+a.substr(0,length);继续检测,直到相等的字符为止,则原来的大问题就转化为了一个相同的小问题,递归调用既可了。