除了陣列和鍊錶資料結構,字串也是程式設計工作面試中的另一熱點話題。我參加過的編碼面試基本都問過關於字串的問題。
如果你了解陣列,那麼你就能輕易地解決基於字串的問題,因為字串就是字元陣列。因此,你通過解決陣列程式設計問題學到的所有技巧,也能用來解決字串程式設計問題。
1.查詢字串中第乙個非重複的字元?
使用linkedhashmap和兩個for迴圈實現。
linkedhashmap儲存了字串的順序,遍歷第一遍字串,key,value,key為字元,value為字元個數。
public static void findnodup(string s)
for(entryentry:counts.entryset())
}
利用set和list
set存放重複,list存放非重複
public static void findnodup(string s) else
} system.out.println(norepeat.get(0));
}
2.判斷兩個字串是否為變形詞
例如"abc" 和"cba"
由於"aabc"和"aacb"情況,所以不能用set。
利用map陣列,存放256ascii。字串a存在的字元計數,遍歷字串b。
也可用hashmap替代map陣列。
public static boolean isdeformation(string s,string b)
for (char c : cb)
return true;
}
3.反轉字串
首尾指標反轉
public static string reverse(string s)
for(int i=0;i遞迴
public static string reverse(string s)
}
如何檢查乙個字串是否僅包含數字?
isdigit判斷
public static boolean isnum(string s)
return true;
}
正則
public static boolean isnumeric(string str)
ascii
public static boolean isnum(string s)
return true;
}
5.如何搜尋乙個字串的所有排列情況?
6.在不使用任何庫的情況下,如何反轉給定句子中的單詞?
例如:「hello world」 => 「olleh dlrow」
public static string reversewords(string s)
return ch;
}
6.在不使用任何庫的情況下,如何反轉給定句子中的單詞?
例如:「hello world」 => 「world hello」
反轉兩次
public static string reversewords(string s)
return ch;
}
使用stringbuilder
public string reversesentence(string str)
return sb.tostring();
}
7.判斷字串的旋轉詞
例如"abc" 的旋轉詞為"abc",「bca」,「cab」
構造新字串"abc"+"abc"旋轉詞一定是其子串
public static boolean check(string a, string b)
8.左旋轉字串
s=」abcxyzdef」,要求輸出迴圈左移3位後的結果,即「xyzdefabc」
先旋轉左移部分,再旋轉不移動部分,再整體旋轉
public string leftrotatestring(string str,int n)
public static void reverse(char charstr,int i,int j)
}} return s.substring(start, start+longest);
// return longest;
}
<2>中心展開
中心擴充套件就是把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來找最長的子回文串。演算法複雜度為o(n^2)。
需要考慮兩種情況:
長度為奇數的回文串,比如a, aba, abcba
長度為偶數的回文串,比如aa, abba
可以將每個字元間插入間隔符』#'這樣所有的字串都變為基數
例如"aba"=>"#a#b#a#"
「abba」=>"#a#b#b#a"
public string longestpalindrome(string s)
j--;
k++;}}
for(int i = 0; i < len; i++)//求長度為偶數的回文串
j--;
k++;}}
return s.substr(start, maxlen);
}
private static int maxlen = 0;
private static string sub = "";
public static string longestpalindrome(string s)
return sub;
}public static void findlongestpalindrome(string s,int low,int high)
low --;//向兩邊擴散找當前字元為中心的最大回文子串
high ++;
}else
break;
}}
字串的全排列
給定乙個沒有重複數字的序列,返回其所有可能的全排列。
示例:輸入: [1,2,3]
輸出:[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
public static list> permute(int nums)
public static list> permutedfs(int nums, int start, list> res)
for (int i = start; i < nums.length; i++)
return res;
} public static void swap(int nums, int left, int right)
字串彙總
字串的暴力,挺無腦的,沒什麼想說的。inline void init inline int query int l,int r 第一次是橫著hash,用的是p1,此時的 h 表示的是第 i 行長度為 j 的字首串的hash值。第二次是豎著hash,用的是p2,此時的 h 發生了更新,此時的 h 變成...
字串方法彙總
1.定義字串直接量 var s abc 2.構造字串 var s new string 建立空字串 var s new string adafwv 字串初始化 3.計算字串長度s.length 注意 字串長度不可以像陣列一樣動態增長,但可使用下標來定義單個字元 4.查詢字串 charat 返回字串中...
字串函式彙總
為什麼strcpy要有返回值?返回strdest的原始值使函式能夠支援鏈式表示式,增加了函式的 附加值 同樣功能的函式,如果能合理地提高的可用性,自然就更加理想。鏈式表示式的形式如 int ilength strlen strcpy stra,strb 又如 char stra strcpy new...