Problem
1. 本题涉及对由大写字母组成的字符串进行推理。您将实现出现在同一类(未显示)中的两个相关方法。第一个方法采用单个字符串参数并返回该字符串的乱序版本。第二种方法采用字符串列表,并通过打乱列表中的每个条目来修改列表。任何无法加扰的条目都会从列表中删除。
a) 编写 scrambleWord 方法,它接受给定的单词并根据以下规则返回包含该单词的乱序版本的字符串。
- 置乱过程从单词的第一个字母开始,从左到右继续。
- 如果两个连续的字母由“A”组成后跟一个不是“A”的字母,然后这两个字母在结果字符串中交换。
- 一旦两个相邻位置的字母被交换,这两个位置都不能参与未来的交换。
下表显示了几个单词示例及其加扰版本。
<正文>
单词 |
scrambleWord(word)返回的结果 |
“谭” |
“TNA” |
“阿布拉卡达布拉” |
“巴卡达巴拉” |
“哇” |
“哇” |
“土豚” |
“阿拉德弗拉克” |
“鸡蛋” |
“鸡蛋” |
“A” |
“A” |
“” |
“” |
表>
完整的打字方法如下。
/** 打乱给定的单词。
* @param word 要打乱的单词
* @return 打乱后的词(可能等于word)
* 前提条件:word 要么是空字符串,要么只包含大写字母。
* 后置条件:返回的字符串是从 word 创建的,如下所示:
* - 这个词被打乱了,从第一个字母开始,从左到右继续
* - 由“A”组成的两个连续字母后跟一个不是“A”的字母被交换了
* - 字母最多交换一次
*/
public static String scrambleWord(String单词)
b) 编写 scrambleOrRemove 方法,它将参数 wordList 中的每个单词替换为其加扰版本,并删除加扰后未更改的所有单词。 wordList 中条目的相对顺序与调用 scrambleOrRemove 之前相同。
以下示例显示了调用 scrambleOrRemove 后如何修改 wordList 的内容。
在调用 scrambleOrRemove 之前:
词表
<正文>
0 |
1 |
2 |
3 |
4 |
“棕褐色” |
“ABRACADABRA” |
“哇” |
“苹果” |
“鸡蛋” |
表>
在调用 scrambleOrRemove 之后:
单词表
<正文>
0 |
1 |
2 |
“棕褐色” |
“巴卡达巴拉” |
“PAPLE” |
表>