网易0912 暗黑字符串

网易0912 暗黑字符串

  题目的大意:

  一个字符串只能由‘A’、‘B’、‘C’三个字母组合而成;若在字符串中如果‘A’‘B’‘C’三个字符任意组合出现,则此字符串为清澈的,否则为黑暗的。如“AABBCCABAA”因为包含“CAB”,所以是清澈的;“AABBCCBCBBA”则是黑暗的。

  输入:字符串的长度n(1 <= n <= 30)

  输出:包含的黑暗字符串的个数


  样例:

  输入:2

             3

  输出:9

            21

  解题思路:

  字符串不为黑暗,n >= 3;

  当 n = 1时,有3种情况,均为黑暗;

  当 n = 2时,有9种情况,均为黑暗;

  当 n = 3时,第一个位置有3种选择,第二个位置也有3种选择;第三个位置看前两个位置的选择情况:如果前两个字符相同则第三个位置有三种选择;否则有两种选择。故共有3 * (3 + 2 * 2) = 21种是黑暗的。

  当n = 4时,按照n = 3的情况进行类推,如果第2个位置和第三个位置字符相同时,第四个位置有3种选择,否则有两种选择。故共有 3 * (3 * (1 + 2) + 2 * (1 * 2 + 2))) = 51种是黑暗的

  ......

  规律:

  从 n = 3开始共有 3 * (3 * num3 + 2 * num2)种

  并且 num3' = num3 + num2     num2' = 2 * num3 + num2



  源码如下:

package wangyi;

import java.util.Scanner;

public class Main2 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner scan = new Scanner(System.in);
		long arr[] = new long [30];
		arr[0] = 3;
		arr[1] = 9;
		long num3 = 1;
		long num2 =2;
		for(int i = 2;i < 30;i++){
			arr[i] = 3 * (3 * num3 + 2 * num2);
			long temp = num3;
			num3 = num2 + num3;
			num2 = 2 * temp + num2;
		}
		int n;
		while(scan.hasNextInt()){
			n = scan.nextInt();
			System.out.println(arr[n - 1]);
		}
	}
}


 

### 在 Lua 中实现字符串替换 在 Lua 中,可以通过 `string.gsub` 函数来实现字符串替换功能。该函数的主要作用是对目标字符串中的特定模式进行全局替换,并返回替换后的结果以及替换次数。 以下是 `string.gsub` 的基本语法: ```lua result, count = string.gsub(string, pattern, replacement [, n]) ``` - **string**: 被操作的目标字符串。 - **pattern**: 需要被替换的部分,支持正则表达式的模式匹配[^3]。 - **replacement**: 替换的内容,可以是一个字符串或者一个函数[^3]。 - **n**(可选): 表示最多替换的次数,默认为全部替换。 #### 示例 1:简单替换 下面的例子展示了如何将字符串中的某个单词替换成另一个单词: ```lua local originalString = "Lua is good" local replacedString = string.gsub(originalString, "good", "bad") print(replacedString) -- 输出: Lua is bad ``` 此代码片段通过 `string.gsub` 将 `"good"` 替换成了 `"bad"`。 #### 示例 2:替换特殊字符 当需要替换一些具有特殊含义的字符时,比如 `$` 或 `\`,需要用 `%` 进行转义: ```lua -- 替换美元符号为 RMB local specialCharString = "我们使用$" local result = string.gsub(specialCharString, "%$", "RMB") print(result) -- 输出: 我们使用RMB -- 替换路径分隔符 \ 为 / local filePath = "a\\b\\c\\d\\e.txt" filePath = string.gsub(filePath, "\\", "/") print(filePath) -- 输出: a/b/c/d/e.txt ``` 这里分别演示了如何安全地替换特殊字符 `$` 和反斜杠 `\`[^3]。 #### 示例 3:动态替换 如果希望根据某些逻辑动态生成替换内容,则可以在第三个参数传入一个函数: ```lua local dynamicReplace = function(matched) return matched .. "_replaced" end local testString = "apple banana cherry" local newString = string.gsub(testString, "%w+", dynamicReplace) print(newString) -- 输出: apple_replaced banana_replaced cherry_replaced ``` 在此例子中,每次找到匹配项都会调用自定义函数 `dynamicReplace` 来决定具体的替换方式[^4]。 ### 注意事项 虽然 `string.gsub` 功能强大,但在实际应用过程中需要注意以下几点: 1. 如果模式中含有元字符(如 `.`, `*`, `(` 等),需加 `%` 符号进行转义; 2. 当仅需部分替换而非整体替换时,可通过设置第四个参数限制最大替换数量; 3. 对于复杂场景下的字符串解析与修改,可能还需结合其他辅助方法共同完成任务。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值