我正在尝试提交30天代码的HackerRank Day 6 Challenge。
我能够在Xcode Playground中完成任务而没有问题,但是HackerRank的网站说我的方法没有输出。我昨天遇到了一个问题,因为浏览器出现了问题,但清理缓存,从Safari切换到Chrome等似乎无法解决我在这里遇到的问题。我认为我的问题在于inputString
。
任务 给定长度为N且从0到N-1索引的字符串S,将其偶数索引和奇数索引字符打印为单行上的2个以空格分隔的字符串(有关详细信息,请参阅下面的示例)。 / p>
输入格式
第一行包含一个整数(测试用例的数量)。 后续行的每一行都包含一个String,。
约束
- 1 <= T <= 10
- 2 <= S的长度&lt;万
输出格式
对于每个String(其中0&lt; = j&lt; = T-1),打印S的偶数索引字符,后跟空格,后跟S的奇数索引字符。
这是我提交的代码:
import Foundation
let inputString = readLine()!
func tweakString(string: String) {
// split string into an array of lines based on char set
var lineArray = string.components(separatedBy: .newlines)
// extract the number of test cases
let testCases = Int(lineArray[0])
// remove the first line containing the number of unit tests
lineArray.remove(at: 0)
/*
Satisfy constraints specified in the task
*/
guard lineArray.count >= 1 && lineArray.count <= 10 && testCases == lineArray.count else { return }
for line in lineArray {
switch line.characters.count {
// to match constraint specified in the task
case 2...10000:
let characterArray = Array(line.characters)
let evenCharacters = characterArray.enumerated().filter({$0.0 % 2 == 0}).map({$0.1})
let oddCharacters = characterArray.enumerated().filter({$0.0 % 2 == 1}).map({$0.1})
print(String(evenCharacters) + " " + String(oddCharacters))
default:
break
}
}
}
tweakString(string: inputString)
我认为我的问题在于inputString
。我正在“按原样”接受它并在我的方法中格式化它。我已经为第6天找到了解决方案,但我似乎无法在Swift中找到任何解决方案。
感谢您的阅读。我欢迎有关如何让这件事过去的想法。
答案 0 :(得分:1)
readLine()
从标准输入中读取单行
表示您的inputString
仅包含第一行
输入数据。你必须在一个循环中调用readLine()
来获取
剩余的输入数据。
所以你的程序看起来像这样:
func tweakString(string: String) -> String {
// For a single input string, compute the output string according to the challenge rules ...
return result
}
let N = Int(readLine()!)! // Number of test cases
// For each test case:
for _ in 1...N {
let input = readLine()!
let output = tweakString(string: input)
print(output)
}
(强制展开是可以接受的,因为格式为 输入数据记录在挑战描述中。)
答案 1 :(得分:1)
嗨,阿德里安,你应该每行打电话readLine()!
。这里是该挑战的一个示例答案;
import Foundation
func letsReview(str:String){
var evenCharacters = ""
var oddCharacters = ""
var index = 0
for char in str.characters{
if index % 2 == 0 {
evenCharacters += String(char)
}
else{
oddCharacters += String(char)
}
index += 1
}
print (evenCharacters + " " + oddCharacters)
}
let rowCount = Int(readLine()!)!
for _ in 0..<rowCount {
letsReview(str:String(readLine()!)!)
}