字符串变形词
變形詞:
給定兩個(gè)字符串str1和str2,如果str1和str2中出現(xiàn)的字符種類一樣且每種字符出現(xiàn)的次數(shù)也一樣,那么str1和str2互為變形詞。HashMap 解法:
HashMap的主要方法
int size() :得到Map中“鍵-值對(duì)”的數(shù)量
boolean isEmpty() :Map是否是空的,也就是是否不含有任何“鍵-值對(duì)”
boolean containsKey(Object key) :Map中是否含有以key為鍵的“鍵-值對(duì)”
boolean containsValue(Object value) :Map中是否含有以 value 為值的“鍵-值對(duì)”
Object get(Object key) :從Map中得到以key為鍵的值,如果Map中不含有以key為鍵的“鍵-值對(duì)”則返回null
Object put(Object key, Object value) :向Map中存儲(chǔ)以key為鍵、value為值的“鍵-值對(duì)”
Object remove(Object key) :從Map中移除以key為鍵的“鍵-值對(duì)”
void putAll(Map t) :將另一個(gè)Map中的所有“鍵-值對(duì)”導(dǎo)入到此Map中
void clear() :清除所有“鍵-值對(duì)”
Set keySet() :得到所有的鍵
Collection values() :得到所有的值
Set entrySet() :得到所有的“鍵-值對(duì)”,Set中的類型是Map.Entry
原始類型 封裝類
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
初始化HashMap<Character,Integer> s=new HashMap<Character,Integer>();
數(shù)組解法
此題的兩個(gè)字符串種類和次數(shù)都一樣,只有順序不一樣,那么可以使用一個(gè)數(shù)組記錄第一個(gè)字符串每個(gè)字母的出現(xiàn)頻率次數(shù),這樣在第二個(gè)字符串中遍歷每個(gè)字符,從數(shù)組中挨個(gè)減去,如果數(shù)組最后為空了,說明兩個(gè)字符互為變形詞。
對(duì)于數(shù)組的選擇,可以利用字符的ASCII碼值,字符可以直接和整型進(jìn)行算術(shù)運(yùn)算,字符串則不可以 ,例如:
‘a(chǎn)’+0 = 97;“a”+0 = a0;字符的編碼值出現(xiàn)在0~255之間,我們開辟一個(gè)266空間的整型數(shù)組map,每個(gè)字符的ASCII值對(duì)應(yīng)數(shù)組的下標(biāo),例如a是97,b是98,map[97] = 3,說明a出現(xiàn)了3次。
public class Deformation {public static void main(String[] args){String a = "123444";String b = "344421";System.out.println(isDeformation(a,b)); }public static boolean isDeformation(String a, String b){char[] chas1 = a.toCharArray();char[] chas2 = b.toCharArray();int[] map = new int[256];if(chas1.length!=chas2.length){return false;}for(int i=0;i<chas1.length;i++){map[chas1[i]]++;}for(int i=0;i<chas2.length;i++){if(map[chas2[i]]--==0){return false;}}return true;}算法時(shí)間復(fù)雜度:o(n)
算法空間復(fù)雜度:字符種類個(gè)數(shù)
int a='你'; System.out.println(a); 20320 為了防止這種使用HashMap.進(jìn)制
二進(jìn)制:采用0和1兩個(gè)數(shù)碼來表示的數(shù)。進(jìn)位規(guī)則是“逢二進(jìn)一”
八進(jìn)制:采用0-7八個(gè)數(shù)字計(jì)數(shù),進(jìn)位規(guī)則是“逢八進(jìn)一”
十進(jìn)制:采用0-9十個(gè)數(shù)字計(jì)數(shù),進(jìn)位規(guī)則是“逢十進(jìn)一”
十六進(jìn)制:采用0-9,A-F(10-15),進(jìn)位規(guī)則是“逢十六進(jìn)一”
/*** 進(jìn)制轉(zhuǎn)換*/public class jinzhiTest {public static void main(String[] args) {int i = 22;//二進(jìn)制 10110 = 1*2^4+0*2^3+1*2^2+1*2^1+0*2^0=22 System.out.println(Integer.toBinaryString(i)); //10110 //八進(jìn)制 26 = 2*8^1+6*8^0 = 22System.out.println(Integer.toOctalString(i)); //26//十六進(jìn)制 16 = 1*16^1+6*16^0 = 22System.out.println(Integer.toHexString(i)); //16}}字符:是各種文字和符號(hào)的總稱,包括各個(gè)國家的文字、標(biāo)點(diǎn)符號(hào)、圖形符號(hào)、數(shù)字等。
字符集:字符集是多個(gè)符號(hào)的集合,每個(gè)字符集包含的字符個(gè)數(shù)不同。
字符編碼:字符集只是規(guī)定了有哪些字符,而最終決定采用哪些字符,每一個(gè)字符用多少個(gè)字節(jié)表示等問題,則是由編碼來決定的。計(jì)算機(jī)要準(zhǔn)確的處理各個(gè)字符集文字,需要進(jìn)行字符編碼,以便計(jì)算機(jī)能夠識(shí)別和存儲(chǔ)各種文字。(通過字符編碼可以把字符轉(zhuǎn)化成字節(jié))
二、常見的字符集編碼介紹
1、ASCII字符集
1.1、定義
ASCII 字符集:美國信息互換標(biāo)準(zhǔn)代碼。是基于羅馬字母表的一套電腦編碼系統(tǒng),主要顯示英語和一些西歐語言,是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng)。ASCII字符集只有256個(gè)字符,用0-255之間的數(shù)字來表示。(使用7位單元的字符集01111111–>256)
1.2、包含內(nèi)容
控制字符(回車鍵、退格、換行鍵等)
可顯示字符(英文大小寫、阿拉伯?dāng)?shù)字、西文符號(hào))
擴(kuò)展字符集(表格符號(hào)、計(jì)算符號(hào)、希臘字符、拉丁符號(hào))
1.3、編碼方式
第0-31號(hào)及127號(hào)是控制字符或通訊專用字符
第32-126號(hào)是字符,其中48-57號(hào)是0-9是個(gè)阿拉伯?dāng)?shù)字,65-90號(hào)為26個(gè)大寫英文字母,97-122號(hào)為26個(gè)英文小寫字母,其余一些為標(biāo)點(diǎn)符號(hào),運(yùn)算符號(hào)等。
其他編碼參見 : https://blog.csdn.net/xiaoxianer321/article/details/61617622
總結(jié)
- 上一篇: 面试之智力问题
- 下一篇: 字符串之数字子串求和