1.字符串中最长相同子串(动态方程)
public class MaxReStr {
public String findStr(String s){
if(s==null){
return null;
}
//最长重复子串的长度
int max=0;
//最长重复子串的第一个字符在s中的下标
int first=0;
String res = null;
//i为每次循环设定的字符串比较间隔:1,2,...,s.length()-1
for(int i=1;i<s.length();i++){
for(int k=0,j=0;j<s.length()-i;j++){
if(s.charAt(j)==s.charAt(j+i))
k++;
else
k=0;
if(k>max){
max=k;
first=j-max+1;
}
}
if(max>0){
res = s.substring(first, first+max);
}
}
return res;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "eabcdabcf";
System.out.println(new MaxReStr().findStr(s));
}
}
2.
字符出现次数
private static String pass(String s){
if(s==null){return null;}
if(s.length()>20){return s;}//也要考虑非法输入
Map<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){map.put(s.charAt(i),map.get(s.charAt(i))+1);}
else{map.put(s.charAt(i),1);}
}
int min=Integer.MAX_VALUE;
Collection<Integer> coll=map.values();
for(int i:coll){
if(i<min){
//min=1;
min=min>i?i:min;
}}
Set<Character> set=new HashSet<>();
//查找出现次数最大或者最小的char
for(Map.Entry<Character,Integer> i:map.entrySet()){
if(i.getValue().equals(min)){set.add(i.getKey());}
}
StringBuffer sb=new StringBuffer();
for(int i=0;i<s.length();i++){if(!set.contains(s.charAt(i))){sb.append(s.charAt(i));}}
return sb.toString();
}
3.大写字符转换为小写,并且为下一位
4.排序,不区分大小写
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 26; i++) {
for (int j = 0; j < str.length(); j++) {
if (str.charAt(j) == (i + 'a') || str.charAt(j) == (i + 'A')) {
builder.append(str.charAt(j));
}
}
}
5.最长回文判断(奇偶长度)
public class Solution{
public String longestPalindrome(String s) {
if (s.isEmpty()) {
return null;
}
if (s.length() == 1) {
return s;
}
String longest = s.substring(0, 1);
for (int i = 0; i < s.length(); i++) {
// get longest palindrome with center of i
String tmp = helper(s, i, i);
if (tmp.length() > longest.length()) {
longest = tmp;
}
// get longest palindrome with center of i, i+1
tmp = helper(s, i, i + 1);
if (tmp.length() > longest.length()) {
longest = tmp;
}
}
return longest;
}
public String helper(String s, int begin, int end) {
while (begin >= 0 && end <= s.length() - 1 && s.charAt(begin) == s.charAt(end)) {
begin--;
end++;
}
return s.substring(begin + 1, end);
}
6.判断两个字符串包含的字母是否
private static boolean isBrother(String s1, String s2) {
int len1 = s1.length();
int len2 = s2.length();
if (len1 != len2 || s1.equals(s2))
return false;
else {
int hash[] = new int[26];
for (int i = 0; i < len1; i++)
hash[s1.charAt(i) - 'a']++;
for (int i = 0; i < len1; i++)
hash[s2.charAt(i) - 'a']--;
for (int i = 0; i < len1; i++)
if (hash[i] != 0)
return false;
return true;
}
相同(字符顺序不一定一致)
7.a是否包含b
// 如果两个都为 “”
<pre name="code" class="java"><pre name="code" class="java">public class Solution {
public int strStr(String haystack, String needle) {
if(haystack==null||needle==null||needle.length()<0||haystack.length()<0||needle.length()>haystack.length()){return -1;}
for(int i=0;i<haystack.length()-needle.length()+1;i++){
int j=0;
for(j=0;j<needle.length();j++){
if(haystack.charAt(i+j)!=needle.charAt(j)){
break;
}
}
if(j==needle.length()){return i;}
}
return -1;
}
}