已有一個由26字母中的幾個組成的字符串(可出現重複),再插入一個字母,能組成多少種字符串

小明有26種遊戲海報,用小寫字母a-z表示,小明會把遊戲海報裝訂成冊(可能有重複的海報),冊子可以用一個字符串來表示,每個字符就表示對應的海報,例如abcdea,小明現在想做一些“特別版”,然後賣掉,特別版就是會從所有海報(26種)中隨機選一張,加入到冊子的任意一個位置。
那現在小明手裏已經有一種海報冊子,再插入一張新的海報後,他一共可以組成多少不同的海報冊子呢?

代碼沒有在OJ測過,不知道能不能達到100%

import com.sun.deploy.util.StringUtils;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class StringDistinct {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str = sc.next();
            int strLen = str.length();
//            int strDistinctLen = strDistinctLen(str);
            String strOrderDistinct = stringOrderDistinctLen(str);
            int strOrderDistinctLen = strOrderDistinct.length();
            //先計算字符串中未出現的字母個數,直接插入到算上頭尾一共str.length() + 1個可能
            int finalResult = (26 - strOrderDistinctLen) * (strLen + 1);
            //循環已出現的、去重後的字母,計算把這個字母去掉後的字符串插入這個字母的可能性
            for (int x = 0; x < strOrderDistinctLen; x++) {
                finalResult += (str.replaceAll(String.valueOf(strOrderDistinct.charAt(x)), "").length() + 1);
            }
            System.out.println(finalResult);
        }
    }

    //字符串整體去重
    private static String stringOrderDistinctLen(String str) {
        Set<String> list = new HashSet<String>();
        for (int x = 0; x < str.length(); x++) {
            list.add(String.valueOf(str.charAt(x)));
        }
        return StringUtils.join(list, "");
    }

      //相鄰字符串去重,和這題沒關係,開始想錯了,也算是一個算法了
//    public static int strDistinctLen(String str) {
//        List<String> list = new ArrayList<String>();
//        for (int i = 0; i < str.length(); i++) {
//            list.add(str.charAt(i) + "");// 這裏就是使用字符串存入到list中,
//        }
//        for (int m = 0; m < list.size() - 1; m++) {
//            if (list.get(m).equals(list.get(m + 1))) {
//                list.remove(m + 1);
//                m--;
//            }
//        }
//        StringBuffer sb = new StringBuffer();
//        String str3 = "";
//        for (int j = 0; j < list.size(); j++) {
//            str3 = sb.append(list.get(j)).toString();
//        }
//        return str3.length();
//    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章