任何人都可以使用编程语言Go解决以下问题吗?
詹姆斯得到了他的朋友哈利写的一封情书 他的女友。作为詹姆斯的恶作剧者,他决定 干涉它。他把信中的所有单词都改成了 回文。
在修改单词的字母时,他遵循2条规则:
他总是减少一封信的价值,例如:他改变了'd' 'c',但他没有将'c'改为'd'。
- 醇>
如果他必须反复 减少一封信的价值,他可以这样做,直到这封信成为 '一个'。一旦一封信改为'a',它就不再是 改变。
任何字母值的每次减少都算作单一 操作。找到他执行的最少操作次数 将给定的字符串转换为回文结构。
输入格式
第一行包含整数T,即数字 测试用例。下一个T行将包含每个字符串。
输出格式
包含最小数量的单行 与每个测试用例相对应的操作。
约束
1≤T≤101≤字符串长度≤104所有字符均为 较低的。
示例输入
#00 3 abc abcba abcd
样本输出
#00 2 0 4
解释
对于第一个测试用例,ab * c * - > ab * b * - > AB * A *。为了 第二个测试用例,abcba是一个回文字符串。进行第三次测试 case,abc * d * - > abc * c * - > abc * b * - > abc * a * = ab * c * a - > AB * b *表一。
这个谜题来自HackerRank.com我是一个golang新手,无法使用该语言解决这个难题。
答案 0 :(得分:0)
我没有看到Go编程语言中的解决方案有什么特别之处。例如,
// The Love-Letter Mystery
// https://www.hackerrank.com/challenges/the-love-letter-mystery
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
)
// palindrome returns the minimum number of operations carried out
// to convert a word into a palindrome.
// A word is a set of lower-case ASCII letters.
func palindrome(word string) (ops int) {
for i, j := 0, len(word)-1; i < j; i, j = i+1, j-1 {
n := int(word[i]) - int(word[j])
if n < 0 {
n = -n
}
ops += n
}
return ops
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
if scanner.Scan() {
t, err := strconv.Atoi(scanner.Text())
if err != nil {
fmt.Fprintln(os.Stderr, "reading input:", err)
t = 0
}
for ; t > 0 && scanner.Scan(); t-- {
fmt.Println(palindrome(scanner.Text()))
}
if t > 0 {
fmt.Fprintln(os.Stderr, "reading input:", io.ErrUnexpectedEOF)
}
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading input:", err)
}
}
输入:
3
abc
abcba
abcd
输出:
2
0
4
输入:
3
cba
cbabc
dcba
输出:
2
0
4