[LeetBook]【学习日记】获取子字符串 + 颠倒子字符串顺序
题目
动态口令
某公司门禁密码使用动态口令技术。初始密码为字符串 password,密码更新均遵循以下步骤:
设定一个正整数目标值 target 将 password 前 target 个字符按原顺序移动至字符串末尾 请返回更新后的密码字符串。
示例 1:
输入: password = “s3cur1tyC0d3”, target = 4 输出: “r1tyC0d3s3cu”
示例 2:
输入: password = “lrloseumgh”, target = 6 输出: “umghlrlose”
提示:
1 <= target < password.length <= 10000
解法1:利用 C++ 中的 substr() 获取子字符串
- 利用 C++ 中的 substr() 获取子字符串后进行拼接即可
- string.substr(a, b) 将返回 a 到 b-1 的 string 对象
class Solution {
public:string dynamicPassword(string password, int target) {string substr1 = password.substr(0, target);string substr2 = password.substr(target);return substr2 + substr1;}
};
解法2:ab != ba = ((a-1)(b-1))-1
- 在交换律不一定成立的时候,有ab != ba = ((a-1)(b-1))-1 ,设原字符串为 ab,要得到 ba 就进行三次反转(求逆)
- 类似于矩阵或者向量叉乘,交换律不一定成立
class Solution {
public:string dynamicPassword(string password, int target) {reverse(password.begin(), password.begin() + target);reverse(password.begin() + target, password.end());reverse(password.begin(), password.end());return password;}
};作者:Krahets
链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm/lh3167/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。