字符串

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;
    }
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值