首页 > 试题广场 >

字符串组合

[编程题]字符串组合
  • 热度指数:5613 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入一个字符串,输出该字符串中相邻字符的所有组合。
举个例子,如果输入abc,它的组合有a、b、c、ab、bc、abc。(注意:输出的组合需要去重)(40分)

输入描述:
一个字符串


输出描述:
一行,每个组合以空格分隔,相同长度的组合需要以字典序排序,且去重。
示例1

输入

bac

输出

a b c ac ba bac
package main

import (
	"fmt"
	"sort"
	"strings"
)

func main() {
	var s string
	fmt.Scan(&s)
	res := getStr(s)

	sort.Slice(res, func(i, j int) bool {
		return len(res[i]) < len(res[j])
	})

	sort.SliceStable(res, func(i, j int) bool {
		if len(res[i]) == len(res[j]) {
			return res[i]+res[j] < res[j]+res[i]
		}
		return false
	})

	fmt.Println(strings.Join(res, " "))
}

func getStr(s string) []string {
	res := make([]string, 0)
	m := make(map[string]bool)
	for i := 0; i < len(s); i++ {
		if !m[string(s[i])] {
			res = append(res, string(s[i]))
			m[string(s[i])] = true
		}
		for j := i + 1; j <= len(s); j++ {
			if !m[s[i:j]] {
				res = append(res, s[i:j])
				m[s[i:j]] = true
			}
		}
	}
	return res
}


发表于 2024-08-11 23:01:53 回复(0)