字串類程式設計彙總

2021-08-28 16:42:59 字數 3566 閱讀 2788

除了陣列和鍊錶資料結構,字串也是程式設計工作面試中的另一熱點話題。我參加過的編碼面試基本都問過關於字串的問題。

如果你了解陣列,那麼你就能輕易地解決基於字串的問題,因為字串就是字元陣列。因此,你通過解決陣列程式設計問題學到的所有技巧,也能用來解決字串程式設計問題。

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...