题解 | #字符串合并处理#

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f

package main

import (
	"fmt"
	"sort"
)

func main() {
	var str1, str2 string
	fmt.Scan(&str1, &str2)
	mergedStr := mergeString(str1, str2)
	sortedStr := sortString(mergedStr)
	convertedStr := convertString(sortedStr)

	fmt.Println(convertedStr)
}

// 合并两个字符串
func mergeString(str1, str2 string) string {
	return str1 + str2
}

// 字符串进行排序,奇数位和偶数位分别从小到大排序
func sortString(str string) string {
	evens := []byte{}
	odds := []byte{}

	for i := 0; i < len(str); i++ {
		if i%2 == 0 {
			evens = append(evens, str[i])
		} else {
			odds = append(odds, str[i])
		}
	}

	sort.Slice(evens, func(i, j int) bool {
		return evens[i] < evens[j]
	})
	sort.Slice(odds, func(i, j int) bool {
		return odds[i] < odds[j]
	})
	result := ""
	for i := 0; i < len(str); i++ {
		if i%2 == 0 {
			result += string(evens[i/2])
		} else {
			result += string(odds[i/2])
		}
	}
	return result
}

// 字符串中的'0'-'9'、'A'-'F'和'a'~'f'字符进行转换
func convertString(str string) string {
	result := ""
	for i := 0; i < len(str); i++ {
		if isHex(str[i]) {
			binary := reverseBinary(str[i])
			decimal := binaryToDecimal(binary)
			hex := decimalToHex(decimal)
			result += hex
		} else {
			result += string(str[i])
		}
	}
	return result
}

// 判断字符是否为十六进制字符
func isHex(ch byte) bool {
	return (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f')
}

// 将十六进制字符转换为二进制字符串并倒序
func reverseBinary(ch byte) string {
	var binary string
	switch {
	case ch >= '0' && ch <= '9':
		binary = fmt.Sprintf("%04b", ch-'0')
	case ch >= 'A' && ch <= 'F':
		binary = fmt.Sprintf("%04b", ch-'A'+10)
	case ch >= 'a' && ch <= 'f':
		binary = fmt.Sprintf("%04b", ch-'a'+10)
	}

	reverseBinary := ""
	for i := len(binary) - 1; i >= 0; i-- {
		reverseBinary += string(binary[i])
	}
	return reverseBinary
}

// 将二进制字符串转换为十进制数
func binaryToDecimal(binary string) int {
	decimal := 0
	for i := 0; i < len(binary); i++ {
		if binary[i] == '1' {
			decimal += 1 << (len(binary) - 1 - i)
		}
	}
	return decimal
}

// 将十进制数转换为十六进制字符
func decimalToHex(decimal int) string {
	switch {
	case decimal >= 0 && decimal <= 9:
		return string(decimal + '0')
	case decimal >= 10 && decimal <= 15:
		return string(decimal - 10 + 'A')
	}
	return ""
}

全部评论

相关推荐

字节一直是我的白月光,考虑到转正还是拒了日常实习。
从明天开始狠狠卷JV...:为什么你释放的offer没流到我头上
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-28 12:15
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务