给定一个由Q和W组成的长度为n的字符串s,每个Q的得分是题目中连续出现Q的个数
时间: 2024-02-23 12:59:59 浏览: 19
,每个W的得分是题目中连续出现W的个数。例如,字符串"QQWQWQWWQ"的得分为3 + 1 + 2 + 1 = 7。现在你需要编写一个程序,计算给定字符串s的得分。
你可以使用以下Python代码实现:
```python
def get_score(s):
score = 0
count_q = 0
count_w = 0
for i in range(len(s)):
if s[i] == 'Q':
count_q += 1
score += count_w
elif s[i] == 'W':
count_w += 1
score += count_q
return score
```
其中,count_q和count_w分别表示当前连续出现的Q和W的个数,score表示总得分。程序中使用了一个循环来遍历字符串s中的每个字符。如果当前字符是Q,就将连续出现的W的个数加到得分中;如果当前字符是W,就将连续出现的Q的个数加到得分中。最后返回得分即可。
如果你有更好的实现方法,欢迎分享。
相关问题
给定一个由n个小写字母组成的字符串s,需要使用最少数量的钱币来压缩它。
题目描述:
给定一个由n个小写字母组成的字符串s,需要使用最少数量的钱币来压缩它。
解题思路:
这道题可以使用哈夫曼编码来解决。哈夫曼编码是一种前缀编码,它的特点是将出现频率较高的字符用较短的编码表示,而将出现频率较低的字符用较长的编码表示,从而达到压缩数据的目的。
具体做法是,首先统计每个字符在字符串中出现的次数,然后将每个字符看作一个节点,将它们按照出现次数从小到大排序,然后每次取出出现次数最小的两个节点,将它们合并成一个新节点,新节点的出现次数为两个节点的出现次数之和,然后将新节点插入到原来的节点序列中,重复上述步骤,直到只剩下一个节点为止。最后,将每个字符的编码表示出来,将字符串压缩成一个二进制串,计算出需要的钱币数量即可。
代码实现:
以下是Python代码实现:
给定一个字符串在字符串中找到一个连续出现至少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 码,从而方便地将字符转换成数字。