任何人都可以解决这个编程挑战吗?

时间:2014-06-21 18:23:20

标签: go

任何人都可以使用编程语言Go解决以下问题吗?

  

詹姆斯得到了他的朋友哈利写的一封情书   他的女友。作为詹姆斯的恶作剧者,他决定   干涉它。他把信中的所有单词都改成了   回文。

     

在修改单词的字母时,他遵循2条规则:

     
      
  1. 他总是减少一封信的价值,例如:他改变了'd'   'c',但他没有将'c'改为'd'。

  2.   
  3. 如果他必须反复   减少一封信的价值,他可以这样做,直到这封信成为   '一个'。一旦一封信改为'a',它就不再是   改变。

  4.         

    任何字母值的每次减少都算作单一   操作。找到他执行的最少操作次数   将给定的字符串转换为回文结构。

         

    输入格式

         

    第一行包含整数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新手,无法使用该语言解决这个难题。

1 个答案:

答案 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