タイトルの説明:
文字列の左回転操作は、文字列の前のいくつかの文字を文字列の最後に転送することです。弦の左回転動作を実現する関数を定義してください。たとえば、文字列「abcdefg」と数値2を入力すると、関数は結果「cdefgab」を返します。これは、2ビット左に回転します。
例1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
例2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
制限:
- 1 <= k <s.length <= 10000
出典:LeetCode
リンク:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
問題分析:この問題には2つの方法を使用しました。
最初の方法:文字列のsubstr()文字列インターセプト関数を使用する
- まず、文字列tmpをs + sに割り当てます。これは、元の文字列が最初と最後でスプライスされた後の新しい文字列です。
- 赤い矢印は傍受された文字列の先頭を指し、緑の矢印は傍受された文字列の末尾を指します。
- s.substr(開始位置、インターセプト長)、添え字は0から始まるため、対応するnは開始添え字であり、元の文字列の長さはインターセプトされる長さです。
ACコード:
class Solution {
public:
string reverseLeftWords(string s, int n) {
string tmp=s+s;
int len=s.size();
return tmp.substr(n,len);
}
};
2番目のタイプ:
- これは、nからトラバースしてからn-1にトラバースするものと見なすことができ、ループと見なすことができます。
- 空の文字列で受信し、添え字nからトラバースし、変数numを使用して、文字列の長さに達するまでトラバースの総数を制御します。
- ループトラバーサルの形成を制御する方法は?長さ制御、n%= s.size()を使用します。
class Solution {
public:
string reverseLeftWords(string s, int n) {
string tmp="";
int num=0;
int len=s.size();
while(num!=len)
{
tmp+=s[n];
n++;
num++;
n%=len;
}
return tmp;
}
};
文字列関数を使用してインターセプトする速度はまだはるかに遅いか、手書きループは高速です。