给定一个长度为n的字符串,求向左移k位的字符串
时间: 2023-06-02 21:03:05 浏览: 94
思路:将原字符串的前k个字符移到末尾即可。
代码实现:
```python
def left_rotate_string(s, k):
if not s:
return ''
n = len(s)
k %= n
return s[k:] + s[:k]
```
测试:
```python
s = 'abcdefg'
k = 2
print(left_rotate_string(s, k)) # 'cdefgab'
s = 'abc'
k = 5
print(left_rotate_string(s, k)) # 'cab'
```
相关问题
用c帮我写给定一个长度为n的字符串,求向左移k位的字符串
以下是使用C语言编写的实现代码:
```
#include <stdio.h>
#include <string.h>
void leftShift(char *str, int k);
int main()
{
char str[100];
int k;
printf("请输入一个字符串:");
scanf("%s", str);
printf("请输入向左移动的位数:");
scanf("%d", &k);
leftShift(str, k);
printf("左移后的字符串为:%s", str);
return 0;
}
void leftShift(char *str, int k)
{
int len = strlen(str);
k %= len; // 确保k小于字符串长度
// 将前k个字符移动到字符串末尾
for (int i = 0; i < k; i++) {
char temp = str[0];
for (int j = 1; j < len; j++) {
str[j - 1] = str[j];
}
str[len - 1] = temp;
}
}
```
使用示例:
```
请输入一个字符串:abcdefg
请输入向左移动的位数:3
左移后的字符串为:defgabc
```
解释:将字符串 "abcdefg" 向左移动 3 位,结果为 "defgabc"。
给定一个字符串在字符串中找到一个连续出现至少k次的字符
可以使用滑动窗口的思想来解决这个问题。具体步骤如下:
1. 初始化滑动窗口的左右边界,以及一个长度为 26 的数组,用来记录每个字符出现的次数。
2. 遍历字符串,每遇到一个字符,就将该字符出现次数加 1。同时,将滑动窗口的右边界向右移动一位。
3. 如果当前滑动窗口中该字符出现的次数大于等于 k,就继续向右移动右边界,直到该字符出现次数小于 k。
4. 如果当前滑动窗口中所有字符都出现了至少 k 次,就更新最长连续子串的长度。
5. 如果当前滑动窗口中某个字符出现次数小于 k,就将该字符出现次数减 1,并将滑动窗口的左边界向右移动一位。
6. 重复上述步骤,直到遍历完整个字符串。
下面是示例代码实现:
```python
def find_longest_substring(s: str, k: int) -> int:
ans = 0
n = len(s)
freq = [0] * 26 # 记录每个字符出现的次数
# 滑动窗口的左右边界
left, right = 0, 0
while right < n:
# 将当前字符出现次数加 1
freq[ord(s[right]) - ord('a')] += 1
# 移动右边界
right += 1
# 如果当前滑动窗口中该字符出现的次数大于等于 k,就继续向右移动右边界,直到该字符出现次数小于 k
while left < right and min(freq) >= k:
# 更新最长连续子串的长度
ans = max(ans, right - left)
# 将左边界向右移动一位,并将对应字符出现次数减 1
freq[ord(s[left]) - ord('a')] -= 1
left += 1
return ans
```
注意,上述代码中使用了 ord() 函数将字符转换成 ASCII 码,从而方便地将字符转换成数字。
阅读全文